“面试官问我 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






















暂无评论内容