CMS垃圾回收器运行机制与优缺点

CMS垃圾回收器是Java中一种关注低停顿时间的并发收集器,使用标记-清除算法。其主要阶段包括初始标记、并发标记、重新标记和并发清除。在并发标记和清除阶段,GC线程与用户线程并发执行,可能导致CPU资源竞争和浮动垃圾。CMS的缺点包括对CPU资源敏感、可能出现浮动垃圾和内存碎片,这些问题可以通过调整参数如CMSInitiatingOccupancyFraction和CMSFullGCsBeforeCompaction进行优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 简介

CMS(Concurrent Mark Sweep)收集器将低GC停顿作为目标的并发收集器,采用“标记-清除”算法,尽可能降低GC的停顿时间,关注应用的响应速度,所以它在Web应用服务中被大量使用。

2 运行机制

在这里插入图片描述

CMS进行GC的两个阶段

(1)标记阶段

  • 初始标记(STW):标记GC Roots能直接关联到的对象,速度较快
  • 并发标记:从初始标记过程标记到的对象遍历对象图,该过程与用户进程并发执行
  • 重新标记(STW):增量地对并发标记过程产生变动的对象进行标记,稍长于初始标记

(2)清除阶段

  • 并发清除:仅清理标记阶段判断的已死亡的对象,不移动存活对象,与用户线程并发执行

对于CMS GC的过程来说,在初始标记和重新标记有停顿,其余过程都与用户进程并发执行。

3 缺点

3.1 对CPU资源敏感

由于GC线程是CPU密集型线程,且它与用户线程在“并发标记”与“并发清除”阶段是并发执行的,所以GC线程会与用户线程竞争CPU资源,使得部分用户线程得不到执行,导致应用程序的总吞吐量降低。

机器的CPU核数越少,该问题越明显。

CMS默认启动回收线程数为(CPU+3)/4。对于一个4核CPU来说,并发过程中GC线程会占用不超过25%的CPU资源,对于2核CPU则为不超过50%,即核数越多影响越小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值