老年代常见的垃圾收集器
Serial Old收集器(-XX:+UseSerialOldGC,标记-整理算法)
- 单线程收集,进行垃圾收集时,必须暂停所有工作线程
- 简单高效,Client模式下默认的老年代收集器
Parallel Old收集器(-XX: +UseParallelOldGC,标记-整理算法)
- 多线程,吞吐量优先
CMS收集器(-XX:+UseConcMarkSweepGC,标记-清除算法)
- 初始标记:stop-the-world
- 并发标记:并发追溯标记,程序不会停顿
- 并发预清理:查找执行并发标记阶段从年轻代晋升到老年代的对象
- 重新标记:暂停虚拟机,扫描CMS堆中的剩余对象
- 并发清理:清理垃圾对象,程序不会停顿
- 并发重置:重置CMS收集器的数据结构
CMS收集器图示
G1收集器(-XX:+UseG1GC,复制+标记-整理算法)
Garbage First收集器的特点
- 并行和并发
- 分代收集
- 空间整合
- 可预测的停顿
Garbage First收集器
- 将整个Java堆内存划分成多个大小相等的Region
- 年轻代和老年代不再物理隔离