1. 程式人生 > >Minor GC與Full GC分別在什麼時候發生?

Minor GC與Full GC分別在什麼時候發生?

首先區分一下Minor GC和Full GC。
Minor GC是新生代GC,指的是發生在新生代的垃圾收集動作。由於java物件大都是朝生夕死的,所以Minor GC非常平凡,一般回收速度也比較i快。

Major GC/Full GC 是老年代GC,指的是發生在老年代的GC,出現Major GC一般經常會伴有Minor GC,Major GC的速度比Minor GC慢的多。

何時發生?
(1)Minor GC發生:當jvm無法為新的物件分配空間的時候就會發生Minor gc,所以分配物件的頻率越高,也就越容易發生Minor gc。

(2)Full GC:發生GC有兩種情況,①當老年代無法分配記憶體的時候,會導致MinorGC,②當發生Minor GC的時候可能觸發Full GC,由於老年代要對年輕代進行擔保,由於進行一次垃圾回收之前是無法確定有多少物件存活,因此老年代並不能清除自己要擔保多少空間,因此採取採用動態估算的方法:也就是上一次回收傳送時晉升到老年代的物件容量的平均值作為經驗值,這樣就會有一個問題,當發生一次Minor GC以後,存活的物件劇增(假設小物件),此時老年代並沒有滿,但是此時平均值增加了,會造成發生Full GC