新生代
Serial
单线程收集器, 进行gc时会进行STW(Stop the world), 暂停其他工作线程
ParNew
Serial多线程版本
Parallel Scavenge
复制算法多线程垃圾收集器, 关注吞吐量(CPU总时间 = 线程work时间 + gc时间),
-XX:MaxGCPauseMillis, 当这个数值变小时,会减少gc的时间, 牺牲吞吐量(缩减新生代的大小, 将导致更频繁的gc)
-XX:+UseAdaptiveSizePolicy, 设置后可不用配置新生代大小, eden, survivor比例, 晋升老年代对象年龄, 这些会在运行时被动态调节以获得合适的吞吐量
老年代
Serial Old
老年代单线程收集器, 使用标记-整理算法, 会出现STW
Parallel Old
老年代多线程收集器, 使用标记-整理算法, 与 Parallel Scavenge 配合使用
CMS(Concurrent Mark Swap)
采用标记-清除
四阶段
1 初始标记
标记gc roots 直接关联到的对象 (需要STW)
2 并发标记
gc root tracing (与工作线程并发)
3 重新标记
重新标记 2 阶段 产生变化(需要STW)
4 并发删除
与工作线程并发
G1(garbage first)
标记-整理
将新生代 和 老年代划分为多个region, 跟踪每个region 垃圾堆积程度, 优先处理堆积度大的region
网友评论