JVM---G1中的RSet和卡表

关于跨代引用和YGC什么的我就解释了,如果描述清楚的话,又要写一大篇,况且网上关于这些概念的解释有很多,我这里只说一下几个我理解错和理解好长时间的地方。

参考文章

《JVM(十二)记忆集和卡表》

《JVM之记忆集和卡表》

Region

Region这个概念,我一直理解错了,看了很多博客,从博主贴的图上理解一直以为一个对象是一个Region,其实不是,Region中可以包含一个或多个对象,Region中的对象类型有Eden,Survivor,Old,Humongous。Humongous是大对象,当Humongous的大小超过Region一半是,使用多个连续的Humongous来盛放。

记忆集和卡表

我一直以为记忆集和卡表是两个东西,并且每个Region都有一个记忆集(RSet)和卡表,然后问了大牛之后才知道,其实RSet就是卡表的实现,卡表是数组,而RSet是HashTable。其实这么说不好理解,我是这么理解的,老年代的Region中不要考虑RSet,只需要记住有一个卡表(也就是数组)就行了;而新生代的Region中有一个RSet(也就是HashTable)。

因为老年代的Region会进行平均分割,分割后的区域都会记录在卡表里;而新生代的RSet是HashTable,key为引用新生代的Region初始内存地址,这里也就是老年代的Region初始内存地址,而value是个数组,数组的值为老年代中卡表的索引,也就是第一个卡的第几个元素

 如图,初始地址为A的老年代,引用了新生代的两个对象,在新生代的RSet中,key为A,value为a,b(表示卡表的索引及元素位置);而初始地址为B的老年代,引用了新生代的一个对象,在新生代的RSet中也有相应的记录

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值