work hard work smart

专注于Java后端开发。 不断总结,举一反三。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

Posted on 2020-01-11 19:25  work hard work smart  阅读(353)  评论(0编辑  收藏  举报

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

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