深入理解JAVA虛擬機閱讀筆記——垃圾回收器
阿新 • • 發佈:2018-06-23
ont 分享 root 深入理解 .com 筆記 直接 用戶線程 另一個 2. ParNew收集器
一、垃圾收集器總覽
新生代: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收集器
以獲取最短回收停頓時間為目標。基於“標記 — 清除”算法。
具體實現主要為四個步驟:
- 初始標記 (Stop the world) 初始標記僅僅是標記GC Roots能直接關聯到的對象;
- 並發標記 並發標記進行GC Roots Tracing;
- 重新標記 (Stop the world) 重新標記修正並發標記期間,標記產生變動的記錄;
- 並發清除
CMS收集器的缺點:
- 對CPU資源過於敏感
- 無法處理“浮動垃圾”(並發清除階段產生的垃圾)。因此需要在老年代空間中為浮動垃圾預留一部分空間,如果預留空間不足,則會出現一次“Concurrent Mode Failure”失敗,臨時啟用Serial Old收集器進行垃圾回收。
- 基於標記清除算法,會產生內存碎片。
7. G1收集器
G1收集器的特點:
- 並行與並發
- 分代收集
- 空間整合
- 可預測的停頓
深入理解JAVA虛擬機閱讀筆記——垃圾回收器