CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间 为目标的收集器。采用的是"标记-清除算法",整个过程分为4步
(1) 初始标记 CMS initial mark 标记GC Roots直接关联的对象,不用Tracing,速度很快 //初始标记在jdk1.7中是串行 在1.8是并行 -XX:+CMSParallelInitialMarkEnabled(1.8中默认开启并行)
(2) 并发标记 CMS concurrent mark 进行GC Roots Tracing(标记可达对象的整个引用链)
(3) 重新标记 CMS remark 修改并发标记因用户程序变动的内容
(4) 并发清除 CMS concurrent sweep 清除不可达对象回收空间,同时有新垃圾产生,留着下次清理称为浮动垃圾
初始标记示意图:
由于整个过程中,并发标记和并发清除,收集器线程可以与用户线程一起工作,所以总体上来说,CMS收集器的内存回收过程是与用户线程一起并发地执行的。