Java 垃圾回收之老年代垃圾回收器

Serval Old收集器(-XX:+UseSerialOldGC, 标记-整理算法)

单线程收集,进行垃圾收集时,必须暂停所有工作线程

简单高效,Client模式下默认的老年代收集器

Parallel Old收集器(-XX:+UseParallelOldGC, 标记-整理算法)JDK 6后提供

多线程,吞吐量优先

CMS收集器(-XX:+UseConcMarkSweepGC,  标记-清除算法)

分为以下阶段

初始标记:stop-the-world

并发标记: 并发追溯标记,程序不会停顿

并发预清理: 查找执行并发标记阶段从年轻代晋升到老年代的对象

重新标记: 暂停虚拟机,扫码CMS堆中的剩余对象

并发清理: 清理垃圾对象,程序不会停顿

并发重置:重置CMS收集器的数据结构

这六个步骤中,初始标记和重新标记,会有短暂的stop-the-world

G1收集器(-XX:+UseG1GC, 复制+标记-整理算法)(年轻代和老年代都能用)

Garbage First 收集器的特点

并发和并行

分代收集

空间整合

可预测的停顿

将整个Java堆内存划分为多个大小相等的Region

年轻代和老年代不再物理隔离

原文地址:https://www.cnblogs.com/linlf03/p/12180856.html