1. 程式人生 > >JVM:GC-minor gc / full gc觸發條件

JVM:GC-minor gc / full gc觸發條件

minor gc :
當eden區滿沒有足夠記憶體給新物件分配記憶體,觸發minor gc.
full gc:
1、呼叫System.gc()時,系統建議JVM執行full gc,但不必然執行。
一般不建議程式中呼叫System.gc(),可以通過DisableExplicitGC來禁用System.gc(),即忽略System.gc()觸發的full gc 操作
2、老年代或者方法區空間不足
3、在monor gc 前,判斷老年代最大可用連續空間是否大於新生代所有可用物件大小,如果不大於,則需要判斷是否允許擔保失敗,如果不允許,直接full gc。
如果允許,在判斷老年代的最大可用連續空間是否大於歷次晉升到老年代物件的平均大小,如果不大於,則直接full gc.
4、由eden區和from survivor區 複製到 to survivor區的物件如果大於to區的可用空間,則直接轉存至老年代,此時老年代空間不足,則full gc
5、 survivor區物件年齡達到閾值,轉存老年代,老年代空間不足,full gc。
6、survivor區存在某一年齡的物件超過至少一半,則大於等於此年齡的物件,轉存老年代,老年代空間不足,則觸發full gc.