1. 程式人生 > >java垃圾回收之Minor GC和Major GC

java垃圾回收之Minor GC和Major GC

最近在讀周志明寫的

深入理解Java虛擬機器:JVM高階特性與最佳實踐

對Minor GC和Major GC做點筆記

  •  新生代 GC(Minor GC):指發生在新生代的垃圾收集動作,因為 Java 物件大多都具
    備朝生夕滅的特性,所以 Minor GC 非常頻繁,一般回收速度也比較快。
  •  老年代 GC(Major GC  / Full GC):指發生在老年代的 GC,出現了 Major GC,經常
    會伴隨至少一次的 Minor GC(但非絕對的,在 ParallelScavenge 收集器的收集策略裡
    就有直接進行 Major GC 的策略選擇過程) 。MajorGC 的速度一般會比 Minor GC 慢 10
    倍以上。

其中Monor GC如下圖所示


虛擬機器給每個物件定義了一個物件年齡(Age)計數器。如果物件在 Eden 出生並經過第一次 Minor GC 後仍然存活,並且能被 Survivor 容納的話,將被移動到 Survivor 空間中,並將物件年齡設為 1。物件在 Survivor 區中每熬過一次 Minor GC,年齡就增加 1 歲,當它的年齡增加到一定程度(預設為 15 歲)時,就會被晉升到老年代中。物件晉升老年代的年齡閾值,可以通過引數 -XX:MaxTenuringThreshold 來設定。