一、垃圾收集器種類(流行)
二、年輕代垃圾收集器
- Serial 收集器(-XX:+UseSerialGC,複製算法)
- 單線程收集,進行垃圾收集時,必須暫停所有工作線程
- 簡單高效,JVM Client 模式下默認的年輕代收集器
- ParNew 收集器(-XX:+UseParNewGc,複製算法)
- 多線程收集,其餘行爲、特點和 Serial 收集器一樣
- JVM Server 模式下首選的年輕代收集器
- Parallel Scavenge 收集器(-XX:+UseParallelGC,複製算法)
- 比起關注用戶線程停頓時間,更關注系統吞吐量
- 多核下才有優勢,JVM Server 模式下默認的年輕代收集器
三、老年代垃圾收集器
- Serial Old 收集器(-XX:+UseSerialOldGC,標記-整理算法)
- 單線程收集,進行垃圾收集時,必須暫停所有工作線程
- 簡單高效,JVM Client 模式下默認的老年代收集器
- Parallel Old 收集器(-XX:+UseParallelOldGC,標記-整理算法)
- 多線程,吞吐量優先
- CMS 收集器(-XX:+UseConcMarkSweepGC,標記-清除算法)
- 收集過程:
- 初始化標記:stop-the-world
- 併發標記:併發追溯標記,程序不會停頓
- 併發預清理:查找執行併發標記階段從年輕代晉升到老年代的對象
- 重新標記:暫停虛擬機,掃描 CMS 堆中剩餘的對象
- 併發清理:清理垃圾對象,程序不會停頓
- 併發重置:重置 CMS 收集器的數據結構
四、G1收集器
G1 收集器(-XX:+UseG1GC,複製、標記-整理算法),即用於年輕代又用於老年代的收集器。
- 特點:
- 並行併發
- 分代收集
- 空間整合
- 可預測的停頓
- 作用:
- 將整個 Java heap 內存劃分成多個大小相等的 region
- 年輕代和老年代不再物理隔離