您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關(guān)如何解決JVM空閑堆內(nèi)存不釋放回OS的問(wèn)題,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
在這些版本中,沒(méi)有用于立即回收的顯式選項(xiàng),但是您可以通過(guò)進(jìn)行設(shè)置來(lái)使GC一般更具侵略性,該設(shè)置-XX:GCTimeRatio=19 -XX:MinHeapFreeRatio=20 -XX:MaxHeapFreeRatio=30
將使其在GC后花費(fèi)更多的CPU時(shí)間來(lái)收集和限制已分配但未使用的堆內(nèi)存的數(shù)量。循環(huán)。
如果使用并發(fā)收集器,還可以將-XX:InitiatingHeapOccupancyPercent=N
N設(shè)置為一個(gè)較低的值,以使GC幾乎連續(xù)運(yùn)行并發(fā)收集,這將消耗更多的CPU周期,但會(huì)更快地縮小堆。通常這不是一個(gè)好主意,但是在某些類型的具有大量備用CPU內(nèi)核但內(nèi)存不足的計(jì)算機(jī)上,這是有道理的。
如果您使用的是G1GC,請(qǐng)注意,它僅使用jdk8u20獲得了在堆中間退還未使用的塊的功能,而早期版本只能在堆末尾返回塊,這對(duì)可裝載的塊數(shù)量有很大的限制。收回。
如果您使用的收集器具有默認(rèn)的暫停時(shí)間目標(biāo)(例如CMS或G1),則您也可以放寬該目標(biāo),以對(duì)收集器施加更少的約束,或者您可以切換并行收集器,以在暫停時(shí)間上優(yōu)先考慮占用空間。
為了驗(yàn)證是否發(fā)生收縮或診斷GC決定不收縮的原因,您可以使用GC Logging-XX:+PrintAdaptiveSizePolicy
來(lái)提供見(jiàn)解,例如,當(dāng)JVM嘗試為年輕一代使用更多內(nèi)存以滿足某些目標(biāo)時(shí)。
添加了-XX:-ShrinkHeapInSteps
可用于更積極地應(yīng)用由上一節(jié)中提到的選項(xiàng)引起的縮小的選項(xiàng)。相關(guān)的OpenJDK錯(cuò)誤。
對(duì)于日志記錄-XX:+PrintAdaptiveSizePolicy
已被替換為-Xlog:gc+ergo
引入了通過(guò)G1PeriodicGCInterval
(JEP 346)為G1GC啟用即時(shí)內(nèi)存釋放的選項(xiàng),但又以一些額外的CPU為代價(jià)。JEP還提到了Shenandoah和OpenJ9 VM中的類似功能。
如果您使用G1收集器并偶爾調(diào)用System.gc()(我每分鐘執(zhí)行一次),則Java將可靠地收縮堆并將內(nèi)存返還給OS。
從Java 12開(kāi)始,如果應(yīng)用程序處于空閑狀態(tài),則G1會(huì)自動(dòng)執(zhí)行此操作。
我建議將這些選項(xiàng)與以上建議結(jié)合使用,以實(shí)現(xiàn)非常緊湊的駐留進(jìn)程大?。?/p>
-XX:+UseG1GC -XX:MaxHeapFreeRatio=30 -XX:MinHeapFreeRatio=10
ZGC在13 Java中發(fā)布,它可以將未使用的堆內(nèi)存返回給操作系統(tǒng),請(qǐng)參閱鏈接
看完上述內(nèi)容,你們對(duì)如何解決JVM空閑堆內(nèi)存不釋放回OS的問(wèn)題有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。