1. 程式人生 > >深入理解JAVA虛擬機閱讀筆記——垃圾回收器

深入理解JAVA虛擬機閱讀筆記——垃圾回收器

ont 分享 root 深入理解 .com 筆記 直接 用戶線程 另一個

一、垃圾收集器總覽

新生代:Serial、 ParNew、 Parallel Scavenge

老年代:CMS、Serial Old、 Parallel Old

最新的:G1

並行和並發的區別:

並行:指多條垃圾收集線程並行工作,但此時用戶線程仍然處於等待狀態。

並發:指用戶線程和垃圾收集線程同時執行(但不一定是並行的,可能會交替執行),用戶線程在繼續執行,而垃圾收集程序運行於另一個CPU上。

技術分享圖片

二、收集器

1. Serial收集器

  單線程收集器、“Stop The World”(必須停止其他工作線程)

  主要運行在Client模式下,簡單而且高效。

  技術分享圖片

2. ParNew收集器

  Serial的多線程版本,Server模式下的虛擬機首選的新生代收集器,除了Serial唯一可以與CMS收集器配合工作的收集器。

  技術分享圖片

3.Parallel Scavenge收集器

  吞吐量優先的收集器、Parallel Scavenge收集器目標是達到一個可控制的吞吐量。(吞吐量=運行用戶代碼時間 / (運行用戶代碼時間 + 垃圾收集時間))。擁有GC自適應的調節策略。

4. Serial Old收集器

  Serial收集器的老年代版本,單線程,使用“標記 - 整理”算法。

  技術分享圖片

5. Parallel Old收集器

Parallel Scavenge收集器的老年代版本,使用多線程和“標記-整理”算法。吞吐量優先的收集器的組合(Parallel Scavenge 和 Parallel Old)。

  技術分享圖片

6. CMS收集器

  以獲取最短回收停頓時間為目標。基於“標記 — 清除”算法。

  具體實現主要為四個步驟:

  1. 初始標記 (Stop the world) 初始標記僅僅是標記GC Roots能直接關聯到的對象;
  2. 並發標記    並發標記進行GC Roots Tracing;
  3. 重新標記 (Stop the world) 重新標記修正並發標記期間,標記產生變動的記錄;
  4. 並發清除

  CMS收集器的缺點:

  • 對CPU資源過於敏感
  • 無法處理“浮動垃圾”(並發清除階段產生的垃圾)。因此需要在老年代空間中為浮動垃圾預留一部分空間,如果預留空間不足,則會出現一次“Concurrent Mode Failure”失敗,臨時啟用Serial Old收集器進行垃圾回收。
  • 基於標記清除算法,會產生內存碎片。

    技術分享圖片

7. G1收集器

  G1收集器的特點:

  1. 並行與並發
  2. 分代收集
  3. 空間整合
  4. 可預測的停頓

    技術分享圖片

深入理解JAVA虛擬機閱讀筆記——垃圾回收器