书上说, gc roots有4种
虚拟机栈引用的对象 本地栈引用的对象 方法区类静态属性 方法区常量引用的对象
对于young gc,如果考虑老年代引用年轻代,那是不是老年代的卡表也应该作为gc roots
按照我的理解,卡表主要的作用并不是记录对象的引用关系,它是用来描述每个区块的使用情况。所以并不是一个使用层面上的东西。 但是具体差了些什么,需要分析下它的数据结构了。
卡表可以做到不用扫描整个old,只扫描old存在到young引用的区域
卡表是为了解决old引用young时,需要扫描整个old的问题
可是,如果存活的old本来是gc root可达的,那正常扫描就可以的,为什么还需要卡表呢
会存在 在old区存活,但是gc root不可达的情况吗
嗯,是的,如果有老生代到新生代的引用,新生代该对象肯定要被标记
按照我的理解,卡表主要的作用并不是记录对象的引用关系,它是用来描述每个区块的使用情况。所以并不是一个使用层面上的东西。
但是具体差了些什么,需要分析下它的数据结构了。