资料里说目前任何垃圾回收器包括CMS都无法避免stop the world,资料里又说CMS可以做到GC时和其他客户线程并发进行,到底谁是对的?
上面的两句话不矛盾,我这么给你解释一下吧
记住一句话,CMS 虽然是并发垃圾收集器不假,但是在不是什么时候都是并行执行垃圾回收的。
CMS 在初始标记时需要 STW
, 但是会尽可能短,而其他步骤则是并行执行的
CMS 是 JDK 第一个真正意义上的并发垃圾收集器。老年代并发收集器,以获取最短回收停顿时间为目标的收集器,具有高并发、低停顿的特点,追求最短GC回收停顿时间。
从名字中的 Mark Sweep 这两个词可以看出,CMS 收集器是一种 “标记-清除” 算法实现的,它的运作过程相比于前面几种垃圾收集器来说更加复杂一些。整个过程分为四个步骤: