1. 描述
- 相對的是youngGC
- 源於Java堆的內存結構:分代,新生代和老年代
- fullGC即在新生代和老年代都進行垃圾回收
2. fullGC的影響
GC過程中導致服務不可用,降低吞吐率
3. 如何降低fullGC帶來的影響
fullGC長起來可達到5~6s
從降低fullGC頻率和減少fullGC時長的角度,考慮降低其帶來的影響
- 減少fullGC時長
- 降低fullGC頻率
具體的參數調整,比如:
- 垃圾回收器的選擇上:parallelOld多線程一般比serialOld的單線程回收,能加快GC進度,當然也要結合具體機器配置;CMS關注GC停頓時間,PS關注吞吐率,CMS的GC過程大部分與用戶線程併發,只有很短暫的停頓,而parallelOld是STW的,綜上,優先選擇CMS;
- 垃圾回收器參數:parallelOld收集器,設置合理的GC的並行線程數;CMS收集器通過提高老年代使用比例觸發fullGC的參數,降低GC頻率,但觸發閾值過高,有擔保失敗反而增大GC時間的風險,因爲CMS失敗後,會使用默認的serialOld收集器重新回收;另外CMS默認使用標記-整理方法(儘管它的名字是mark-sweep),相對標記-清除必然增加了GC時長,但標記-清除算法會產生空間碎片,當大對象無法分配內存時可能會觸發一次fullGC,所以可以選擇折中的辦法,設置在進行一次標記-整理的fullGC之前,先進行m次標記-清除的fullGC這個參數;