理解G1 Remember Set(RSet)
Overview
G1的每个region都有一个Remember Set(Rset)
这个数据结构,用来保存别的region的对象对我这个region的对象的引用,通过Remember Set我们可以找到哪些对象引用了当前region的对象
参考这个文章
由于对我当前region对象的引用可能很多,也可能很少,G1会根据数量的变化来改变数据结构以达到节省空间的目的
第1种,哈希表
key是region的index,value是card数组。
card数组是个啥?
第2种,细粒度的PerRegionTable
这是一个Heap位图,每一位对应一个card
card又是个啥?
第3中,粗粒度位图
每一位代表对应的分区有引用到当前region,具体的对象还得在对应的分区里找
看代码吧那就
看的是jdk12源码
先看定义了哪些结构
src/hotspot/share/gc/g1/heapRegionRemSet.hpp
头部注释,介绍了Remember set
// Remembered set for a heap region. Represent a set of "cards" that
// contain pointers into the owner heap region. Cards are defined somewhat
// abstractly, in terms of what the "BlockOffsetTable" in use can parse.
就是一个set,记录了哪些card包含了指向我们当前region的指针。这个card是抽象的,BlockOffsetTable可以解析这个玩意儿?
再来一大段注释
// The "_coarse_map" is a bitmap with one bit for each region, where set
// bits indicate that the corresponding region may contain some pointer
// into the owning region.// The "_fine_grain_entries" array is an open hash table of PerRegionTables
// (PRTs), indicating regions for which we're keeping the RS as a set of
// cards. The strategy is to cap the size of the fine-grain table,
// deleting an entry and setting the corresponding coarse-grained bit when
// we would overflow this cap.// We use a mixture of locking and lock-free techniques here. We allow
// threads to locate PRTs without locking, but threads attempting to alter
// a bucket list obtain a lock. This means that any failing attempt to
// find a PRT must be retried with the lock. It might seem dangerous that
// a read can find a PRT that is concurrently deleted. This is all right,
// because:
//
// 1) We only actually free PRT's at safe points (though we reuse them at
// other times).
// 2) We find PRT's in an attempt to add entries. If a PRT is deleted,
// it's _coarse_map bit is set, so the that we were attempting to add
// is represented. If a deleted PRT is re-used, a thread adding a bit,
// thinking the PRT is for a different region, does no harm.
_coarse_map:粗粒度位图。是一个位图,每一位指向一个region,某一位设置为1代表有指针指向当前region。
_fine_grain_entries:细颗粒入口。哈希表,元素是PerRegionTables(PRTs),我们保存了RS(一个card的set),指向一些regions。策略是根据细粒度表的大小初始化一下,当我们容量超限的时候,删除entry并设置相应的粗粒度的bit。
我们混合使用 加锁机制 和 不加锁机制 。允许线程不加锁读PRTs,但是要修改bucket的话必须获得锁。这意味着任何查找PRT需要用重试获得锁。看起来,读操作可以找到一个并行的时候被删除的PRT是很危险的。但其实没啥问题,因为
1)我们实际上只在安全的时候释放PRT’s ???
2)我们找PRT’s是为了加entries。如果一个PRT被删除了,他相应的_coarse_map的位设置为1,所以我们尝试去加的那个就呈现了。如果删除的PRT被重用,一个线程加了一个bit,认为PRT是给另一个region的,也没有问题
强行翻译,是在看不懂
理解G1 Remember Set(RSet)相关推荐
- G1垃圾收集器之RSet
本文来说下G1垃圾收集器之RSet 文章目录 堆内存 Region RSet RSet实现过程 RSet有什么好处 RSet有什么风险 本文小结 堆内存 在G1的垃圾回收算法中,堆内存采用了另外一种完 ...
- 5张图带你彻底理解G1垃圾收集器
作为一款高效的垃圾收集器,G1在JDK7中加入JVM,在JDK9中取代CMS成为了默认的垃圾收集器. 1 垃圾收集器回顾 1.1 新生代 新生代采用复制算法,主要的垃圾收集器有三个,Serial.Pa ...
- [转]深入理解G1垃圾收集器
G1 GC是Jdk7的新特性之一.Jdk7+版本都可以自主配置G1作为JVM GC选项:作为JVM GC算法的一次重大升级.DK7u后G1已相对稳定.且未来计划替代CMS.所以有必要深入了解下: 不同 ...
- 转:深入理解Java G1垃圾收集器
本文首先简单介绍了垃圾收集的常见方式,然后再分析了G1收集器的收集原理,相比其他垃圾收集器的优势,最后给出了一些调优实践. 一,什么是垃圾回收 首先,在了解G1之前,我们需要清楚的知道,垃圾回收是什么 ...
- 深入理解 Java G1 垃圾收集器--转
原文地址:http://blog.jobbole.com/109170/?utm_source=hao.jobbole.com&utm_medium=relatedArticle 本文首先简单 ...
- 深入理解 Java G1 垃圾收集器
本文首先简单介绍了垃圾收集的常见方式,然后再分析了G1收集器的收集原理,相比其他垃圾收集器的优势,最后给出了一些调优实践. 一,什么是垃圾回收 首先,在了解G1之前,我们需要清楚的知道,垃圾回收是什么 ...
- 深入理解 Java G1 垃圾收集器GC调优
本文首先简单介绍了垃圾收集的常见方式,然后再分析了G1收集器的收集原理,相比其他垃圾收集器的优势,最后给出了一些调优实践. 一,什么是垃圾回收 首先,在了解G1之前,我们需要清楚的知道,垃圾回收是什么 ...
- java -g_Java G1深入理解(转)
一.什么是垃圾回收 首先,在了解G1之前,我们需要清楚的知道,垃圾回收是什么?简单的说垃圾回收就是回收内存中不再使用的对象. 垃圾回收的基本步骤有2步:1.查找内存中不再使用的对象:2.释放这些对象占 ...
- java -g_【JVM】7、深入理解Java G1垃圾收集器
本文首先简单介绍了垃圾收集的常见方式,然后再分析了G1收集器的收集原理,相比其他垃圾收集器的优势,最后给出了一些调优实践. 一,什么是垃圾回收 首先,在了解G1之前,我们需要清楚的知道,垃圾回收是什么 ...
最新文章
- C++中虚函数可以是内联函数吗?
- 牛津大学计算机系主任:人工智能立法重在抓机遇、防危害
- 启用日志调试Kerberos登录验证问题
- unity_简单五子棋的实现(无AI)
- 美团配送资金安全治理之对账体系建设
- 虚拟化技术的概述及使用
- 闲鱼商品理解和选品,究竟是怎么做的?
- 编写高效的PyTorch代码技巧(上)
- 二叉树前序中序后续线索树_二叉树的先序,中序,后序遍历以及线索二叉树的遍历...
- 分公司部署加速设备实现广域网加速
- 双11数据过于完美涉嫌造假?天猫:造谣要负法律责任的哦
- 离散数学:构造性二难推理和破坏性二难定理的解释
- Maven下载安装配置详细过程
- java双重循环去重_java 中 list集合去重
- c++的vector初始化
- Matlab求方差,均值
- 演示固态硬盘装win11系统教程
- C# WinForm GUI之示例
- Photoshop —— 白色(或任意颜色)或黑色物体修改成任意色彩
- uniapp跨域设置
热门文章