JVM差不多都是面试必问的问题了。而问到JVM的话垃圾回收机制肯定是逃不过的,在这其中CMS和G1垃圾回收器肯定是必问之问咯。
今天就让我们来围观一下CMS。
什么是CMS,什么是CMS,如果你想知道什么是CMS的话,我现在就带你研究。
什么是CMS
CMS 是 Concurrent Mark Sweep 的缩写,直译过来就是并发的标记清除算法。
CMS是搭配新生代的串行和并行的垃圾回收器使用,不能和新生代的Parallel Scavenge配合使用。
CMS的工作流程一共分为7步:
- 初始标记(CMS-initial-mark) ,会导致stw;
- 并发标记(CMS-concurrent-mark),与用户线程同时运行;
- 预清理(CMS-concurrent-preclean),与用户线程同时运行;
- 可被终止的预清理(CMS-concurrent-abortable-preclean) 与用户线程同时运行;
- 重新标记(CMS-remark) ,会导致swt;
- 并发清除(CMS-concurrent-sweep),与用户线程同时运行;
- 并发重置状态等待下次CMS的触发(CMS-concurrent-reset),与用户线程同时运行; 其运行流程图如下所示:
流程详解
初始标记
这是CMS中两次stop-the-world事件(即阻塞其他线程)中的一次。
如果需要加快此阶段处理速度,减少停顿时间,可以开