G1垃圾收集器(7)之Full GC

Full GC

當混合回收無法跟上記憶體分配的速度,導致老年代也滿了,就會進行Full GC對整個堆進行回收。G1中的Full GC也而是單執行緒序列的,而且是全暫停,使用的是標記-整理演算法,代價非常高。

暫停時間的控制

G1在移動過程中雖然也是全暫停,不過G1在選擇回收集合上是變化的,每次只選擇部分的區域進行回收,透過計算每個區域的預測暫停時間來保證每次回收所佔用的時間。簡單的說就是將一次完整的GC拆分成多次短時間的GC從而降低暫停的時間,儘量保證每次的暫停時間在使用者的配置範圍(-XX:MaxGCPauseMilli)內。

年輕代大小的配置

G1為了控制暫停時間,年輕代最大區域數是動態調整的,不過如果手動設定了年輕代大小,比如Xmn/MaxNewSize/NewRatio等,並且年輕代最大和最小值一樣,那麼相當於禁用了這個最大區域數調整的功能,可能會導致暫停時間控制的失效(因為年輕代GC是選擇全部區域的,區域過多會導致暫停時間的增加)。所以G1中儘量不要設定年輕代的大小,讓G1自動的進行調整