CMS收集器是基于标记清除算法的一种并发的,低停顿的收集器,值得注意的一点是,CMS只是低停顿而不是没有停顿
CMS分为以下四步:
- 初始标记
- 并发标记
- 重新标记
- 并发清除
初始标记和重新标记都是需要Stop the world的
初始标记仅仅是记录CG root关联的对象,因此停顿时间比较短,并发标记是进行GC RootTracing,重新标记是修正并发标记期间标记的改动(时间比初始标记稍长一点),之后就是进行并发清除,
由于最耗时间的工作都是在并发操作中完成的,所以CMS的停顿会比较低
下面是CMS的过程图
CMS是一个优秀的垃圾回收器,但是他也有不少缺点:
- 他没有办法处理浮动垃圾(就是在初始标记之后产生的垃圾)
- 他会占用大量的CPU资源
- 他会产生碎片空间(当发生Full GC时会使用Serial Old回收器来处理碎片空间)
- 他在回收垃圾时,由于是并行的收集,所以需要的空间比较大