1. 程式人生 > 其它 >5.8堆空間的引數設定

5.8堆空間的引數設定

目錄

5.8堆空間的引數設定

官網說明:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html

-XX:+PrintFlagsInitial 檢視所有的引數的預設初始值
-XX:+PrintFlagsFinal 檢視所有的引數的最終值(可能會存在修改,不再是初始值)
-Xms: 初始堆空間記憶體(預設為實體記憶體的1/64)
-Xmx: 最大堆空間記憶體(預設為實體記憶體的1/4)
-Xmn: 設定新生代的大小(初始值及最大值)
-XX:NewRatio 配置新生代與老年代在堆結構的佔比
-XX:SurvivorRatio 設定新生代中Eden和S0/S1空間的比例
-XX:MaxTenuringThreshold 設定新生代垃圾的最大年齡
-XX:+PrintGCDetails 輸出詳細的GC處理日誌
①-XX:+PrintGC ②-Verbose:gc 列印GC簡要資訊
-XX:HandlePromotionFailure 是否設定空間分配擔保

在發生Minor GC之前,虛擬機器會檢查老年代最大可用的連續空間是否大於新生代所有物件的總空間。

如果大於,則此次Minor GC是安全的

如果小於,則虛擬機器會檢視-XX:HandlePromotioinFailure設定值是否允許擔保失敗

如果HandlePromotionFailure=true,那麼會繼續檢查老年代最大可用連續空間是否大於歷次晉升到老年代的物件的平均大小。

如果大於,則嘗試進行一次Minor GC,但這次Minor GC依然是有風險的;

如果小於,則改為進行一次Full GC;

如果HandlePromotionFailure=false,則改為進行一次Full GC。

在JDK7之後,HandlePromotionFailure引數不會再影響到虛擬機器的空間分配擔保策略,觀察OpenJDK中原始碼變化,雖然原始碼中還定義了HandlePromotionFailure引數,但是在程式碼中已經不會再使用它。JDK7之後的規則變為只要老年代的連續空間大於新生代物件總大小或者歷次晉升的平均大小就會進行Minor GC,否則將進行Full GC。