跨代引用问题

跨代引用

老年代对象引用新生代或新生代引用老年代。

解决办法:记忆集。

HotSpot记忆集的实现方式是卡表,维护一张卡表(Remember Set),类似一个字节数组,每个元素都会存放卡页地址,卡页中存放一个或多个对象,若这些对象存在跨代引用,标记为1,下次GC时,就查(CARD_TABLE[this address>>9]==1;,地址右移9位得到卡表索引)这些标记为1的对象作为GCROOT,进行可达性分析,就不用全老年代扫描了。

并发GC可能导致卡表变脏,通过插入写屏障避免,一旦发生赋值操作就可以把引用的更新写进卡表

posted @ 2021-04-22 23:50  i%2  阅读(134)  评论(0)    收藏  举报