6、Hotspot中的垃圾收集器

1、Serial/Serial Old收集器java

  1. 歷史最悠久的收集器
  2. 單線程的收集器
  3. 在工做時須要停掉虛擬機全部線程
  4. 優勢是在作事專注,動做迅速
  5. 在Client端的新生代中通常使用這個收集器回收,回收200M之內的新生代只須要不到100ms,這對於Client是能夠接受的

2、ParNew收集器算法

  1. Serial收集器的多線程版本
  2. 只有ParNew收集器能夠與CMS收集器配合使用

3、Parallel Scavenge收集器多線程

  1. 吞吐連優先的收集器 
  2. 吞吐量:代碼運行時間/(代碼運行時間 + 垃圾收集時間)

4、CMS收集器併發

  1. 老年代併發收集器
  2. 基於 標記清除算法實現
  3. 執行垃圾收集時有四個步驟
    • 初始標記(Stop the World):標記一下GC Root能直接關聯的對象,速度很快
    • 併發標記:使用可達性分析算法,標記須要回收的對象
    • 從新標記(Stop the World):標記 併發標記 期間變化的對象(多線程)
    • 併發清除
  4. CMS優勢:併發收集、低停頓
  5. CMS缺點:
    • 併發佔用CPU,致使用戶線程變慢
    • 會產生浮動垃圾(併發清除時產生的垃圾),由於在併發清除時還用用戶線程在執行,因此要預留一部份內存,因此能夠經過參數設定當老年代內存被佔用 X% 時觸發CMS回收,若是回收失敗,會觸發Serial Old收集器,進行再一次回收
    • CMS收集器是使用標記清除算法實現的,因此會殘生大量內存碎片,因此當CMS收集器觸發Serial Old時要進行內存整理操做(這個過程沒法併發,因此會致使程序變慢,能夠經過參數設定)

 

5、G1收集器線程

  1. G1收集器是注重停頓時間的收集器
  2. G1收集器能夠不須要其餘收集器配合,獨立管理新生代和老年代
  3. G1收集器將java堆分紅多個Region(新生代和老年代穿插在不一樣的Region裏,再也不物理隔離),兩個Region經過複製算法手機,總體看來經過標記整理算法手機,不會產生內存碎片
  4. 經過創建可預測的停頓時間模型,可讓使用者明確在M毫秒內的內存回收不超過N毫秒
  5. G1收集器,會根據停頓時間模型計算每一個Region回收的經驗值,根據能夠回收的時間(N毫秒)來回收最有回收價值的Region
  6. G1收集器經過Remebered Set記錄Region中對象有沒有被其餘Region中的對象引用(爲了不全堆掃描)
  7. G1收集器的過程:
    • 初始標記(Stop the World):標記一下GC Root能直接關聯的對象,速度很快,與CMS不一樣的是,這個階段會修改TAMS值,讓 併發標記 階段產生的新對象都在正確可用的Region中建立
    • 併發標記:經過可達性分析算法標記回收的對象
    • 最終標記:修正在併發標記時改變的對象,並記錄到Remebered Set Logs中,而後虛擬機將Logs合併到Remebered Set中,這個過程是並行的(非併發)
    • 篩選回收:根據Region的回收價值大小回收

 

相關文章
相關標籤/搜索