CMS(Concurrent Mark Sweep)是Hotspot上第一款真正意义上的并发的垃圾回收器,可以让用户线程与垃圾回收线程同时工作。

  • CMS垃圾回收器关注的焦点是减少停顿时间(低延时),以获得更良好的用户体验。
  • CMS垃圾回收器采用的是标记清除算法(Mark-Sweep),所以也会有STW的时间。

工作原理
CMS垃圾回收器

  1. 初始标记(Initial-Mark):这个阶段所有的工作线程都会因为“Stop-the-Word”机制出现短暂的暂停,这个阶段的任务仅仅是标记出所有可以被 GC Roots 直接关联的对象,一旦标记完成就恢复刚才暂停的工作线程,由于直接关联的对象比较少,所以暂停的时间非常短
  2. 并发标记(Concurrent-Mark):从GC Roots 直接关联的对象开始遍历整个对象图的过程,这个过程耗时长,但是不会暂停用户线程,可以和垃圾收集线程并发工作。
  3. 重新标记(Remark):由于在刚才并发标记的过程,用户线程与垃圾回收线程交替执行或者并发执行,为了修正并发标记期间,因用户程序继续运作导致的标记产生变动的那一部分对象,需要重新标记变化那一部分对象。这一段时间比初始标记时间长,但也远比并发标记的时间短。
  4. 并发清理(Concurrent-Sweep):此阶段清理标记阶段已判定为垃圾的对象,释放内存空间,由于不需要移动存活对象,所以此阶段可以与用户线程并发执行。

相关文章: