CMS和G1收集器第一阶段的意义
来源:7-4 Java垃圾回收之老年垃圾收集器
放牧娃子
2019-10-21
CMS和G1收集器
前两部分
初始标记: 停顿其他线程,标记 GC Roots下一步可到达的对象
并发标记: 并发执行,标记GC Roots可到达的对象。
重新标记:停顿,修正并发用户线程对标记变动的数据
既然可以 并发执行了,为什么要停顿一下并且仅仅标记下一层节点呢?
从根节点 GC Roots开启遍历,与 第二层节点开启遍历有何区别?
难道是为了 开启多个线程来利用多核CPU吗? 这还是回到上面的问题了, 从GC Roots开始根据每个分支开启 线程不一样的吗?
问题: 第一步停顿其他线程的意义在哪里?
第三步的停顿确实是必须的。
写回答
1回答
-
翔仔
2019-10-22
同学好,可能是这句话【 只扫描到能够和"根对象"直接关联的对象,并作标记】产生理解上的歧义,这里应该说成是直接相关的对象,就是说找出根对象。
第一步停顿标记的只是GCroot,这样停顿时间会很短,第二层以后就是可达性分析,会对每个gcroot进行遍历,需要耗时较长
022019-11-21
相似问题