收集器分类
收集器 | 适用分代 | 特性 | 算法 | 优势 | 劣势 |
Serial | 新生代 | 串行 | 复制算法 | 1、简单高效 2、单核CPU适用 | |
Serial Old | 老年代 | 标记-压缩算法 | |||
ParNew | 新生代 | 并行,只是Serial的多线程版本,底层共用代码 | 复制算法 | 1、多核CPU适用 2、减少STW时间 | |
Parallel Scavenge | 新生代 | 并行,高吞吐量 jdk8 默认 | 复制算法 | 1、可控制吞吐量 2、自适应调节 | |
Parallel Old | 老年代 | 标记-压缩算法 | |||
CMS | 老年代 | 并发,低延时 | 标记-清除算法 | 1、并发收集 2、低延迟 | 1、碎片化 2、对CPU资源敏感 3、无法处理浮动垃圾 |
G1 | 新生代+老年代 | 并发,区域分代 jdk9 默认 | 分区之间复制算法, 整体上标记-压缩算法 | 1、并行和并发 2、分代收集 3、空间整合 4、可预测的停顿时间 | 内存占用和负载都较高 |
ZGC | 新生代+老年代 | 并发,区域不分代 jdk14 新特性 | 标记-压缩算法 | 1、低延迟 | |
Epsilon | — | ||||
Shenandoah GC | 新生代+老年代 | Open JDK12出现,RedHat提出 | 低延时 | 高运行负担下的吞吐量下降 |
收集器的配合使用
CMS GC过程
G1 GC过程
1.年轻代GC过程:扫描根 —> 更新RSet —> 处理RSet —> 复制对象 —> 处理引用
2.并发标记过程:初始标记阶段 —> 根区域扫描 —> 并发标记 —> 再次标记 —> 独占清理 —> 并发清理阶段
3.混合回收
4.可选FullGC