别再背八股了!面试说清 CMS 回收器,就靠这篇了

“面试官问我 CMS 是什么,我脑子一热,差点说成了‘内容管理系统’!”这是我一个做了5年 Java 的朋友最近社招面试的真实经历。从这件事我意识到,CMS(Concurrent Mark Sweep)垃圾回收器,虽然老牌,但在很多面试中依然是重点。所以今天,小米就来讲讲我是怎么“跟 CMS 打交道”的——希望能帮到即将跳槽、社招面试的你。

故事的起点:我和 CMS 的第一次“相遇”

还记得那年我第一次维护一个线上老项目,Tomcat 启动参数里赫然写着:

-XX:+UseConcMarkSweepGC

当时的我一脸懵:“这啥?新玩意儿?”

我去查资料才知道,原来它就是传说中的“低延迟垃圾回收器”——CMS,老年代的明星选手,曾一度是互联网公司争相使用的主流 GC 方案。

而这次,也让我开始正式接触 JVM 内存管理的世界。

CMS 的目标是什么?

CMS,全称是 Concurrent Mark Sweep,中文叫“并发标记-清除”。顾名思义,它的最大特点就是——尽量减少 STW(Stop The World)时间,也就是让垃圾回收这件事尽量不打扰业务线程运行

它的“信仰”是:用户体验优先,延迟比吞吐更重要。

也正因为如此,它被广泛用于对响应时间有要求的 Web 服务类系统,像电商、支付、在线教育等系统中。

CMS 的工作流程(记住这四个阶段)

在我看来,CMS 就像是个不打扰别人的清洁工,它一边让用户用着房间,一边偷偷打扫:

1、初始标记(Initial Mark)

短暂停顿(STW)
标记所有 GC Root 直接关联的对象
非常快,一般几毫秒内完成

2、并发标记(Concurre

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容