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进行遍历,需要耗时较长


0
2
翔仔
回复
qq_慕运维1562822
同学好,是为了防止期间有新的垃圾产生
2019-11-21
共2条回复

剑指Java面试-Offer直通车 百度资深面试官授课

招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航

8427 学习 · 1870 问题

查看课程