本技術涉及java,尤其涉及一種java實例池優(yōu)化方法、設備及介質。
背景技術:
1、在當今復雜多變的軟件開發(fā)環(huán)境中,高并發(fā)系統(tǒng)已成為支撐互聯(lián)網服務、大數據處理、云計算平臺等核心應用不可或缺的基礎設施。這類系統(tǒng)往往需要處理數以百萬計甚至更高量級的并發(fā)請求,對資源的管理與利用效率提出了極高的要求。在java這一廣泛應用的服務器端編程語言中,實例池作為一種資源復用技術,旨在減少對象創(chuàng)建與銷毀的開銷,提高系統(tǒng)性能。然而,隨著系統(tǒng)規(guī)模的擴大和并發(fā)量的激增,傳統(tǒng)java實例池的運作機制逐漸暴露出其在高并發(fā)環(huán)境下的局限性,成為影響系統(tǒng)整體性能的關鍵因素之一。
2、隨著實例的不斷創(chuàng)建與銷毀,尤其是在頻繁使用小型對象時,java堆內存逐漸碎片化,不僅降低了內存的利用率,還可能迫使jvm(java?virtual?machine,java虛擬機)更早地觸發(fā)gc(garbage?collection,垃圾回收)。高并發(fā)下,大量對象的快速創(chuàng)建與銷毀直接加劇了垃圾回收的負擔,在極端情況下,頻繁的gc容易導致系統(tǒng)停頓,對實時性要求高的應用造成嚴重影響。
技術實現思路
1、本技術實施例提供了一種java實例池優(yōu)化方法、設備及介質,用于解決如下技術問題:高并發(fā)下,大量對象的快速創(chuàng)建與銷毀直接加劇了垃圾回收的負擔,在極端情況下,頻繁的gc容易導致系統(tǒng)停頓,對實時性要求高的應用造成嚴重影響。
2、本技術實施例采用下述技術方案:
3、本技術實施例提供一種java實例池優(yōu)化方法,包括,根據java實例類型,將java實例池劃分為多個區(qū)塊;其中,多個區(qū)塊分別設置唯一標識,唯一標識用于對多個區(qū)塊進行多線程訪問;確定出多個區(qū)塊內的java實例分別對應的使用頻率與生命周期,基于使用頻率與生命周期,將各區(qū)塊內的java實例分別劃分為長期java實例集合與短期java實例集合。獲取多個區(qū)塊分別對應的資源使用率,基于資源使用率確定出回收時長?;诨厥諘r長,對多個區(qū)塊內分別對應的長期java實例集合與短期java實例集合中的待回收java實例進行回收,以完成java實例池優(yōu)化。
4、本技術實施例通過區(qū)塊劃分,限制每個區(qū)塊內的實例數量,減少鎖的競爭,提高多線程并發(fā)訪問的效率,通過使用頻率和生命周期確定出哪些實例被頻繁創(chuàng)建和銷毀,哪些實例可以長時間駐留,從而優(yōu)化內存分配策略。其次,本技術實施例通過將長期和短期實例分開管理,減少垃圾回收器的掃描范圍,降低垃圾回收的頻繁度和停頓時間。根據資源使用率動態(tài)調整回收時長,在保證應用性能的同時,最大化資源利用率。
5、在本技術的一種實現方式中,根據java實例類型,將java實例池劃分為多個區(qū)塊,具體包括:基于java實例池中的多個java實例,構建劃分隊列;獲取待劃分java實例對應的元數據字段,基于元數據字段確定出待劃分java實例對應的類型;基于劃分隊列順序,將類型相同的待劃分java實例劃分至同一區(qū)塊;獲取多個區(qū)塊分別對應的java實例活躍度,基于java實例活躍度對多個區(qū)塊進行動態(tài)調整;其中,java實例活躍度至少包括內存占用率、java實例創(chuàng)建速率以及java實例銷毀速率中的一項。
6、在本技術的一種實現方式中,獲取多個區(qū)塊分別對應的java實例活躍度,基于java實例活躍度對多個區(qū)塊進行動態(tài)調整,具體包括:在預設時間段內,獲取多個區(qū)塊分別對應的java實例創(chuàng)建率與java實例銷毀率;將java實例創(chuàng)建率與java實例銷毀率進行比對,確定出多個區(qū)塊分別對應的java實例活躍率;基于多個區(qū)塊分別對應的java實例活躍率與多個區(qū)塊分別對應的內存占用率,得到多個區(qū)塊分別對應的區(qū)塊調整動態(tài)值,以對多個區(qū)塊進行動態(tài)調整。
7、在本技術的一種實現方式中,基于使用頻率與生命周期,將各區(qū)塊內的java實例分別劃分為長期java實例集合與短期java實例集合,具體包括:獲取各區(qū)塊內的java實例分別對應的使用頻率,將使用頻率與預置頻率閾值進行比對,基于比對結果,將各區(qū)塊內的java實例劃分為第一實例集合與第二實例集合;獲取各區(qū)塊內的java實例分別對應的生命周期,將生命周期與預置周期閾值進行比對,基于比對結果,將各區(qū)塊內的java實例劃分為第三實例與第四實例集合;基于第一實例集合、第二實例集合、第三實例集合以及第四實例集合之間的交集,將各區(qū)塊內的java實例分別劃分為長期java實例集合與短期java實例集合。
8、在本技術的一種實現方式中,基于第一實例集合、第二實例集合、第三實例集合以及第四實例集合之間的交集,將各區(qū)塊內的java實例分別劃分為長期java實例集合與短期java實例集合,具體包括:將第一實例集合與第三實例集合進行交集處理,并將交集處理結果作為長期java實例集合;以及將第一實例集合與第四實例集合進行交集處理,并將交集處理結果作為短期java實例集合;以及將第二實例集合與第三實例集合進行交集處理,并將交集處理結果作為長期java實例集合;以及將于第二實例集合與第四實例集合進行交集處理,并將交集處理結果作為短期java實例集合。
9、在本技術的一種實現方式中,獲取多個區(qū)塊分別對應的資源使用率,基于資源使用率確定出回收時長,具體包括:基于預置間隔時間段,獲取多個區(qū)塊分別對應的區(qū)塊總內存與各區(qū)塊分別對應的已占用內存;基于各區(qū)塊對應的已占用內存與區(qū)塊總內存之間的比值,得到各區(qū)塊分別對應的資源使用率;將資源使用率與預置資源閾值進行比對,得到第一差值;以及將相鄰兩個間隔時間段對應的資源使用率進行差值計算,得到第二差值;基于第一差值與第二差值確定出回收時長。
10、在本技術的一種實現方式中,基于第一差值與第二差值確定出回收時長,具體包括:將第一差值與第一預置權重分配表進行比對,確定出第一差值對應的第一權重值;基于連續(xù)間隔時間段分別對應的第二差值,構建差值表,以通過差值表確定出使用率變化情況;將使用率變化情況與第二預置權重分配表進行比對,確定出各間隔時間段分別對應的第二權重;基于第一權重與第二權重,確定出各間隔時間段分別對應的回收時長。
11、在本技術的一種實現方式中,基于回收時長,對多個區(qū)塊內分別對應的長期java實例集合與短期java實例集合中的待回收java實例進行回收,具體包括:在多個區(qū)塊的長期java實例集中確定出需要回收的長期實例,以及在多個區(qū)塊的各短期java實例集中確定出需要回收的短期實例;到達回收時長后,將各區(qū)塊內需要回收的長期實例依次進行回收;將各區(qū)塊內需要回收的短期實例進行實時回收。
12、本技術實施例提供一種java實例池優(yōu)化設備,包括:至少一個處理器;以及,與至少一個處理器通信連接的存儲器;其中,存儲器存儲有可被至少一個處理器執(zhí)行的指令,指令被至少一個處理器執(zhí)行,以使至少一個處理器能夠:根據java實例類型,將java實例池劃分為多個區(qū)塊;其中,多個區(qū)塊分別設置唯一標識,唯一標識用于對多個區(qū)塊進行多線程訪問。確定出多個區(qū)塊內的java實例分別對應的使用頻率與生命周期,基于使用頻率與生命周期,將各區(qū)塊內的java實例分別劃分為長期java實例集合與短期java實例集合。獲取多個區(qū)塊分別對應的資源使用率,基于資源使用率確定出回收時長。基于回收時長,對多個區(qū)塊內分別對應的長期java實例集合與短期java實例集合中的待回收java實例進行回收,以完成java實例池優(yōu)化。
13、本技術實施例提供的一種非易失性計算機存儲介質,存儲有計算機可執(zhí)行指令,計算機可執(zhí)行指令設置為:根據java實例類型,將java實例池劃分為多個區(qū)塊;其中,多個區(qū)塊分別設置唯一標識,唯一標識用于對多個區(qū)塊進行多線程訪問。確定出多個區(qū)塊內的java實例分別對應的使用頻率與生命周期,基于使用頻率與生命周期,將各區(qū)塊內的java實例分別劃分為長期java實例集合與短期java實例集合。獲取多個區(qū)塊分別對應的資源使用率,基于資源使用率確定出回收時長。基于回收時長,對多個區(qū)塊內分別對應的長期java實例集合與短期java實例集合中的待回收java實例進行回收,以完成java實例池優(yōu)化。
14、本技術實施例采用的上述至少一個技術方案能夠達到以下有益效果:本技術實施例通過區(qū)塊劃分,限制每個區(qū)塊內的實例數量,減少鎖的競爭,提高多線程并發(fā)訪問的效率,通過使用頻率和生命周期確定出哪些實例被頻繁創(chuàng)建和銷毀,哪些實例可以長時間駐留,從而優(yōu)化內存分配策略。其次,本技術實施例通過將長期和短期實例分開管理,減少垃圾回收器的掃描范圍,降低垃圾回收的頻繁度和停頓時間。根據資源使用率動態(tài)調整回收時長,在保證應用性能的同時,最大化資源利用率。