学习JVM之垃圾收集06——记忆集和卡表(HotSpot)

10 篇文章 0 订阅
10 篇文章 0 订阅

目录

记忆集

记忆集有什么作用

记忆集是什么

记忆集的实现(卡表)

卡表


记忆集

记忆集有什么作用

这里谈记忆集,是为了解决跨代引用带来的问题。

只针对新生代的收集(Minor GC),如果有老年代的对象引用新生的对象怎么办呢?把整个老年代检查一遍是可以,但是这样做很不值得。于是记忆集出现了。

记忆集是什么

记录从非收集区域指向收集区域的指针集合的抽象数据结构

记忆集的实现(卡表)

如上所说,记忆集是一个抽象的数据结构,需要一个对应的具体实现。

大致思考一下,可以建立一个数组,存放所有非收集区域中有跨代引用的对象。

虚拟机觉得这样做开销太大,没有必要。收集器只需要知道某一块非收集区域是否存在指向收集区域的指针就可以了。所以,虚拟机才用了更加粗犷的粒度,比如字长精度(一个机器字长)。

当然对象精度也是可以,但是并不是像上边说的建立对象数组,而是存放是否有跨代指针的一个标记。

还有就是卡精度。表示每个记录精确到一块内存区域,该区域内有对象包含跨代指针。使用卡精度实现记忆集的数据结构叫做卡表

卡表

在HotSpot中,卡表是一个字节数组。卡表中的每个元素对应其标识内存区域的一块特定大小的内存。这一块内存叫卡页。HotSpot的卡页是512字节。只要一个卡页中有一个对象存在跨代引用,就将对应卡表的数组元素的值标识为1,称为元素变脏。没有就为0。

在垃圾收集时,筛选出卡表里的脏元素,把他们加入GC Roots一并扫描。

这一篇就到这里了。

早睡早起,注意身体。早起之王祝你一日千里

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值