觸發MinorGC(Young GC)
虛擬機在進行minorGC之前會判斷老年代最大的可用連續空間是否大於新生代的所有對象總空間
1、如果大於的話,直接執行minorGC
2、如果小於,判斷是否開啟HandlerPromotionFailure,沒有開啟直接FullGC
3、如果開啟了HanlerPromotionFailure, JVM會判斷老年代的最大連續內存空間是否大於歷次晉升的大小,如果小於直接執行FullGC
4、如果大於的話,執行minorGC
觸發FullGC
- 老年代空間不足
如果創建一個大對象,Eden區域當中放不下這個大對象,會直接保存在老年代當中,如果老年代空間也不足,就會觸發Full GC。為了避免這種情況,最好就是不要創建太大的對象。
- 持久代空間不足
如果有持久代空間的話,系統當中需要加載的類,調用的方法很多,同時持久代當中沒有足夠的空間,就出觸發一次Full GC
- YGC出現promotion failure
promotion failure發生在Young GC, 如果Survivor區當中存活對象的年齡達到了設定值,會就將Survivor區當中的對象拷貝到老年代,如果老年代的空間不足,就會發生promotion failure, 接下去就會發生Full GC.
- 統計YGC發生時晉升到老年代的平均總大小大於老年代的空閑空間
在發生YGC是會判斷,是否安全,這里的安全指的是,當前老年代空間可以容納YGC晉升的對象的平均大小,如果不安全,就不會執行YGC,轉而執行Full GC。
- 顯示調用System.gc