JVM:详解CMS垃圾收集器,一篇搞定面试官

CMS,也即Concurrent Mark Sweep,基于标记-清除算法实现。CMS的目标在于缩短STW时间(stop the world),适用于网站应用以及B/S架构的服务器端。

CMS垃圾回收器在进行垃圾回收时,主要经历以下步骤:

1. 初始标记

该阶段需要STW,工作线程需暂停。初始标记阶段的任务在于标记老年代、元空间中能够被GC Roots能够直接关联到的对象,老年代中可直接关联的对象可分为两种,被年轻代对象引用、被老年代对象引用。

2. 并发标记

该阶段无需STW,工作线程与标记线程并发执行。并发标记阶段,依据初始标记阶段标记过的GC Roots能够直接关联到的对象为起点开始遍历,标记所有可以遍历到的节点。

注意:

由于工作线程同步进行,所以在标记线程进行标记的同时,Old Gen中可能产生新的对象,这些新的对象在Old Gen产生时,会将其所在的Card标记为Dirty Card,这么标记的目的在于提高后续的重新标记的效率。

老年代产生新的对象的原因包括:

  • 从Young Gen晋升过来
  • 大对象直接在Old Gen分配空间
  • Young Gen到Old Gen对象的引用关系发生变化等

3. 预清理阶段

通过并发标记,老年代可能产生了Dirty Card,该阶段的目的便是从Dirty Card对应的对象进行遍历,标记在并发标记阶段未能标记的对象。

4. 可终止的预处理

尝试着去承担下一个阶段Final Remark阶段足够多的工作。

5. 重新标记

该阶段产生STW目的在于重新标记Old Gen所有存活的对象。在重新标记阶段,会对整个堆进行重新标记。因为阶段2、3、4中,工作线程与标记线程是同步进行的,所以新生代到老年代的对象的引用关系等均可能发生改变。(Young Gen也会有Dirty Card?不然感觉前面的操作没啥意义了,待研究!)

6. 并发清除

目的在于清除未被标记为存活状态的对象,完成垃圾收集。

7. 并发重置

进行重置,为下一次CMS垃圾收集做好准备。

参考链接:

CMS垃圾回收器详解_zqz_zqz的博客-CSDN博客_cms垃圾回收器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
CMS(Concurrent Mark Sweep)是一种并发的垃圾回收器,它的主要优势是尽可能地减少应用程序的停顿时间。下面是CMS垃圾回收器的实现原理: 1. 初始标记(Initial Mark):这个阶段会暂停应用程序的线程,标记出所有的根对象,即 GC Roots,比如静态变量和活动线程等。这个阶段很快就完成了,但是应用程序会被短暂地暂停。 2. 并发标记(Concurrent Mark):在这个阶段,垃圾回收器会扫描堆中的对象,标记出所有活跃的对象,这个阶段与应用程序是并发执行的,所以不会停顿程序执行。因为这个阶段与应用程序并发执行,所以在这个阶段,堆中的对象可能会发生变化,因此需要在下一个阶段扫描时重新确认它们是否仍然是活跃的。 3. 重新标记(Remark):在这个阶段,垃圾回收器会重新遍历堆中的对象,标记出在并发标记阶段发生变化的对象。这个阶段需要暂停应用程序,但是它的时间通常比初始标记阶段更短。 4. 并发清除(Concurrent Sweep):在这个阶段,垃圾回收器会扫描堆中的对象,清除所有被标记为垃圾的对象。这个阶段与应用程序是并发执行的,因此不会停顿程序执行。由于在清除对象时不需要移动对象,因此这个阶段的性能通常比标记阶段更高。 需要注意的是,CMS垃圾回收器并不会移动对象,因此当堆中的对象达到一定的程度时,会出现碎片化的问题。为了解决这个问题,JVM还提供了G1(Garbage First)垃圾回收器。 另外,CMS垃圾回收器虽然能够减少应用程序的停顿时间,但是在执行过程中会产生一些额外的负载,因此需要根据应用程序的特点和需求来选择合适的垃圾回收器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击的Coder*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值