新生代回收器
通性
- 會觸發StW,暫停所有應用線程
- 復制算法
Serial
- 單線程回收
- 適合單線程系統
ParNew
- 多線程回收
- 優先保證響應速度,降低 STW(STW 越大,執行垃圾回收的時間越長,回收的垃圾越多,減少垃圾回收的頻率)
- 適合低延遲系統,搭配 CMS 使用
Parallel Scavenge
- 多線程回收
- 支持自適應策略,自動調節堆分區的大小和晉升年齡,優先保障吞吐量
- 適合大規模密集型任務等吞吐量較高的場景
老年代回收器
Serial Old
- 單線程
- 標記整理
- 配合 Serial 使用
CMS
- 多線程
- 標記清除
- 初始標記:暫停用戶線程,標記GC Roots對象直接關聯的對象
- 并發標記:并發標記所有垃圾對象
- 重新標記:對并發標記時產生的錯標、漏標,重新標記
- 并發清理:并發刪除垃圾對象
- 配合 ParNew 使用
Parallel Old
- 多線程
- 標記整理
- 配合 Parallel Scavenge 使用
G1
- 將內存分為多個大小相等的 Region 區域,通過堆空間 /2048 得到
- Young GC:將 Eden 和 Survivor 中存活對象復制到新 Survivor 中,年齡 +1,清空這些區域
- Humongous 區:對象大小超過 region 的一半,直接放入老年代的 Humongous 區
- Mixed GC:新生代全部+老年代存活度低的區域回收,新生代轉移到一個區,老年代轉移到一個區
- 初始標記、并發標記、最終標記
- 篩選回收:對各個region的回收價值和成本排序,根據用戶期望停頓時間和回收計劃,選擇 region 回收
- Full GC:對所有對象使用標記整理