CMS收集器是以获取最短的回收停顿时间为目标的收集器。
那么要实现这个目标,一个办法是通过并发机制,让收集线程和用户线程同时运行,以减少停顿时间。
从名字可以看出CMS是一个基于标记-清除算法实现的,他的运作过程分为以下四个步骤:
- 初始标记
 - 并发标记
 - 重新标记
 - 并发清除
 
其中,初始标记和重新标记都需要“stop the world”,也就是用户线程必须停止。
初始标记仅仅是标记与GC Roots直接关联的对象,速度很快;
并发标记阶段就是从GC Roots的直接关联对象开始遍历整个对象图的过程,耗时比较长都是不需要暂停用户线程,而是采用并发的方式与垃圾收集线程同时运行;
而重新标记则是为了修正并发标记期间,由于用户线程继续运作而导致标记变动的那一部分对象的标记记录,这个阶段耗时通常比初始标记阶段多一点,都是远远低于并发标记的耗时。这个阶段是以并行的方式运行垃圾收集线程,而用户线程必须停顿;
最后是并发清除阶段,清理删除掉标记阶段判断的已经死亡的对象,由于不需要移动存活对象,所以这个阶段垃圾收集线程可以与用户线程同时并发。
