關於fullGC的總結

1. 描述

  • 相對的是youngGC
  • 源於Java堆的內存結構:分代,新生代和老年代
  • fullGC即在新生代和老年代都進行垃圾回收

2. fullGC的影響

GC過程中導致服務不可用,降低吞吐率

3. 如何降低fullGC帶來的影響

fullGC長起來可達到5~6s

從降低fullGC頻率和減少fullGC時長的角度,考慮降低其帶來的影響

  • 減少fullGC時長
  • 降低fullGC頻率

具體的參數調整,比如:

  1. 垃圾回收器的選擇上:parallelOld多線程一般比serialOld的單線程回收,能加快GC進度,當然也要結合具體機器配置;CMS關注GC停頓時間,PS關注吞吐率,CMS的GC過程大部分與用戶線程併發,只有很短暫的停頓,而parallelOld是STW的,綜上,優先選擇CMS;
  2. 垃圾回收器參數:parallelOld收集器,設置合理的GC的並行線程數;CMS收集器通過提高老年代使用比例觸發fullGC的參數,降低GC頻率,但觸發閾值過高,有擔保失敗反而增大GC時間的風險,因爲CMS失敗後,會使用默認的serialOld收集器重新回收;另外CMS默認使用標記-整理方法(儘管它的名字是mark-sweep),相對標記-清除必然增加了GC時長,但標記-清除算法會產生空間碎片,當大對象無法分配內存時可能會觸發一次fullGC,所以可以選擇折中的辦法,設置在進行一次標記-整理的fullGC之前,先進行m次標記-清除的fullGC這個參數;
發佈了61 篇原創文章 · 獲贊 6 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章