18910140161

CMS初始标记阶段的gc root究竟有哪些?

顺晟科技

2021-09-11 14:15:43

203

看了一些文章,大概有两种说法: 1、初始标记阶段的gc root是传统意义上的root(包括静态变量、常量池、栈变量等), 再加上新生代对象,该阶段标…

建议别研究cms了,最新的Java版本已经把cms删了

CMS的原始论文里,初始标记的描述用的是gc根,没有别的了,但是Java的gc调优指南里,初始标记描述的是

The first pause is to mark as live the objects directly reachable from the roots (for example, object references from application thread stacks and registers, static objects, and so on) and from elsewhere in the heap (for example, the young generation).This first pause is referred to as the initial mark pause

初始标记阶段还有新生代。

有可能是不同版本的Java中不一样,我看的是Java8和Java11里的描述,也可能是论文表述的是gc根对于老年代来说就包含新生代,或者论文描述是不分代回收之类的。

gc根里是肯定没有新生代的,CMS需要扫描新生代是因为它只负责回收老年代。

说起来,Java5加入了CMS作为实验特性,直到Java9被标记为过时,Java14中完全删除,CMS一直是实验特性,从来没转正过,除了调优十分复杂之外没啥显著特色,研究它没啥意义。

我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航