CMS(Concurrent Mark Sweep) 垃圾收集器是老年代的垃圾收集器,垃圾回收分4个步骤:
- 初始标记(initial mark) 有 STW
- 并发标记(concurrent mark) 没有 STW
- 重新标记(remark) 有 STW
- 并发清除(concurrent sweep) 没有 STW
然后我产生了一个疑问:既然重新标记可以修正并发标记阶段的变动,那么并发标记到底是从哪里开始标记的,是从GCRoot重新标记,还是只重新标记并发操作时有变更的?
从官方文档可以看出,第二次重新标记,并没有从GCRoot开始!
https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/cms.html