【八股细文】说说CMS回收过程,为啥初始标记和重新标记需要STW,而并发标记不需要?

CMS

CMS(Concurrent Mark-Sweep)是一种用于垃圾回收的算法,主要用于减少应用程序停顿时间。在 Java 虚拟机中,CMS 回收过程包括以下几个阶段:

  1. 初始标记阶段(Initial Mark):在这个阶段,GC 线程会暂停所有应用线程,然后标记所有的根对象和直接与根对象关联的对象。这个阶段的目的是标记出所有从根对象直接可达的对象,以便后续的并发标记。

  2. 并发标记阶段(Concurrent Mark):在初始标记阶段完成后,GC 线程会与应用程序线程并发执行,标记所有从根对象间接可达的对象。这个阶段的特点是与应用程序线程并发执行,尽量减少停顿时间。

  3. 重新标记阶段(Remark):在并发标记阶段完成后,GC 线程需要再次暂停应用程序线程,重新标记所有在并发标记阶段有变动的对象,并发标记阶段结束之后产生的新对象。这个阶段的目的是修正并发标记阶段中因应用线程并发执行而导致的标记变动。

  4. 并发清除阶段(Concurrent Sweep):在重新标记阶段完成后,GC 线程与应用程序线程并发执行,清理未标记的对象,释放它们所占用的内存空间。这个阶段与应用程序线程并发执行,不会引起停顿。

总体来说,CMS 回收过程通过并发标记和并发清除的方式来减少垃圾回收时的停顿时间,但在进行垃圾回收的同时,可能会产生内存碎片问题,需要额外的处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值