前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RSet(Remembered Set)

RSet(Remembered Set)

原创
作者头像
Get
发布2024-03-21 22:53:40
740
发布2024-03-21 22:53:40
代码语言:java
复制
RSet(Remembered Set)是一个空间换时间的数据结构(已记忆集合)

新生代回收的跨代引用(老年代引用新生代)问题:

新生代的根对象,一部分来自于老年代
老年代再进行细分:card-table
脏卡:说明该处存放对象,引用了外部那些对象
卡表与 Remembered Set
在引用变更时通过 post-write barrier + dirty card queue
concurrent refinement threads 更新 Remembered Set


RSet:
RSet:是在每个Region里,拿出来一小块区域,专门记录哪些Region引用了当前Region的对象。 
RSet是个哈希表,key记录了对象所在Region,Value记录了对象所在Card(这里的Card 和 Card Table里面的Card一模一样),具体如下图:
借助RSet如何知道A对象是否被引用:
1、首先检查当前RSet是否有数据,如果RSet为空,表示当前Region里的所有对象没有被其他Region对象引用过,
2、那么只需要利用可达性分析算法扫描当前区域,就可以知道A有没有被引用; 
3、如果RSet不为空,则只需要扫描当前Region,和RSet里面的Region 下的某个Card区域。
显而易见,RSet 和 Card Table 具有类似的功能,就是避免在标记垃圾时进行全堆扫描操作。

clipboard.png
clipboard.png

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档