为什么 G1 垃圾收集器不维护年轻代到老年代的记忆集?
为什么 G1 垃圾收集器不维护年轻代到老年代的记忆集?
在 G1 垃圾收集器中,不维护年轻代到老年代的记忆集(Remembered Set, RSet)是因为其设计特点和优化策略使得这种记忆集的维护既不必要也无意义。
1. G1 的设计特点
1.1 分区化设计
- G1 将堆划分为多个大小固定的分区(Region),每个分区可以属于不同的代(年轻代、老年代)。
- G1 的垃圾回收以分区为单位,无需严格按照代的概念进行垃圾回收。
1.2 分代记忆集的需求
- 在传统的分代垃圾收集器(如 CMS 或 Parallel GC)中,需要维护老年代到新生代的记忆集,以避免扫描整个老年代。
- 但在 G1 中,分区已经作为更小的管理单元,不再区分分代的严格边界,而是直接管理跨分区的引用关系。
2. 年轻代到老年代的引用不需要记忆集
2.1 年轻代是完全扫描的
- 在 G1 中,年轻代垃圾回收(Young GC)会扫描整个年轻代的对象。
- 年轻代对象之间的引用和年轻代到老年代的引用都会在扫描过程中自然处理,不需要额外的记忆集记录。
2.2 年轻代生命周期短
- 年轻代的对象大多是短命的,垃圾回收后就会被回收或者晋升到老年代。
- 对于即将晋升的对象,它们在老年代中会被重新记录引用关系,无需在年轻代维护跨代引用的记忆集。
3. G1 的记忆集聚焦于老年代到年轻代和分区间引用
3.1 老年代到年轻代的引用
- 老年代的对象生命周期较长,可能长时间引用年轻代的对象,因此需要记忆集记录这些跨代引用,以避免老年代全堆扫描。
- G1 中,老年代对年轻代的引用会记录在跨分区的记忆集中。
3.2 分区间的引用
- G1 的记忆集本质上是记录分区之间的引用关系,而不是传统意义上的跨代引用。
- 这种粒度更细的跨分区引用跟踪,可以适应 G1 的分区化设计,不局限于代的概念。
4. 性能优化考虑
4.1 维护成本
- 维护年轻代到老年代的记忆集会增加写屏障(Write Barrier)的成本,影响应用性能。
- G1 中通过扫描年轻代直接处理这些引用,避免了记忆集的额外开销。
4.2 避免冗余记录
- 年轻代对象通常被快速回收或晋升,维护其对老年代的引用关系是低效的,因为这种关系短时间内可能失效或被重建。
5. 总结
G1 垃圾收集器不维护年轻代到老年代的记忆集,主要是由于:
- 年轻代垃圾回收会完全扫描年轻代,无需额外维护这些引用。
- G1 的分区化设计聚焦于跨分区的引用关系,而不是传统的代间引用。
- 维护年轻代到老年代的记忆集带来的性能开销高于收益。
这种设计体现了 G1 的分区化和精细化管理的优势,从而更高效地平衡了吞吐量和延迟。
为什么 G1 垃圾收集器不维护年轻代到老年代的记忆集?的更多相关文章
- JVM内存:年轻代、老年代、永久代(推荐 转)
参考文章: 1.Java 新生代.老年代.持久代.元空间 2.Java内存与垃圾回收调优 3.方法区的Class信息,又称为永久代,是否属于Java堆? Java 中的堆是 JVM 所管理的最大的一块 ...
- JVM年轻代,老年代,永久代详解
前言 最近被问到了这个问题,解释的不是很清晰,有一些概念略微模糊,在此进行整理和记录,分享给大家.本篇文章主要讲解内存区域的年轻代,老年代和永久代,略微提及一些垃圾回收算法,下面是正文. 堆整体 堆主 ...
- Major GC 是清理老年代。 Full GC 是清理整个堆空间—包括年轻代和老年代。
Major GC 是清理老年代. Full GC 是清理整个堆空间—包括年轻代和老年代.
- JVM学习八-(复习)年轻代、老年代、永久代
Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象,如下图所示: 在 Java 中,堆被划分成两个不同的区域:新生代 ( Young ).老年代 ( Old).新生代 ...
- JVM堆内存相关的启动参数:年轻代、老年代和永久代的内存分配
如果想观察JVM进程占用的堆内存,可以通过命令工具jmap或者可视化工具jvisualvm.exe.JVM这些启动参数都拥有默认值,如果想了解JVM的内存分配策略,最好手动设置这些启动参数.再通过JD ...
- java面试-G1垃圾收集器
一.以前收集器的特点 年轻代和老年代是各自独立且连续的内存块 年轻代收集器使用 eden + S0 + S1 进行复制算法 老年代收集必须扫描整个老年代区域 都是以尽可能的少而快速地执行 GC 为设计 ...
- 详解 JVM Garbage First(G1) 垃圾收集器(转载)
前言 Garbage First(G1)是垃圾收集领域的最新成果,同时也是HotSpot在JVM上力推的垃圾收集器,并赋予取代CMS的使命.如果使用Java 8/9,那么有很大可能希望对G1收集器进行 ...
- Garbage First(G1)垃圾收集器
1. 概述 G1(Garbage First)垃圾收集器是当今垃圾回收技术最前沿的成果之一.早在JDK7就已加入JVM的收集器大家庭中,成为HotSpot重点发展的垃圾回收技术.同优秀的CMS垃圾回收 ...
- 搞懂G1垃圾收集器
一.G1 GC术语Overview 1.1 并发 并发的意思是Java应用执行和垃圾收集活动可以同时进行 1.2 并行 并行的意思是垃圾收集运算是多线程执行的,比如CMS垃圾收集器的年轻代就是并行的, ...
- 13.G1垃圾收集器
G1收集器是一款面向服务器的垃圾收集器,也是HotSpot在JVM上力推的垃圾收集器,并赋予取代CMS的使命.为什么对G1收集器给予如此高的期望呢?既然对G1收集器寄予了如此高的期望,那么他一定是有其 ...
随机推荐
- CBAM注意力模型介绍
本文分享自天翼云开发者社区<CBAM注意力模型介绍>,作者:Liuzijia 近年来,注意力机制在各项深度学习任务中表现出色.研究表明,人类视觉感知过程中,注意力机制发挥了积极的效果,可以 ...
- Typora Emoji图标
转自: https://www.cnblogs.com/wangjs-jacky/p/12011208.html People :smile: :laughing: :blush: :sm ...
- C# 心跳检测实现
原文链接: https://blog.csdn.net/yupu56/article/details/72356700 TCP网络长连接 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以 ...
- [BZOJ3160] 万径人踪灭 题解
首先正难则反,想到答案即为满足第一条要求的回文子序列数量,减去回文子串数量.回文子串数量 \(hash+\) 二分即可,考虑前半部分. 假如我们将一个回文子序列一层层剥开,就会发现它其实是由多个相同的 ...
- [CERC2014] Parades 题解
感觉长脑子了. 考虑在路线两端点的 \(lca\) 计算贡献,那么线段可以分两类: \(u\) 为 \(v\) 祖先. \(u,v\) 互不为祖先. 设 \(dp_i\) 表示只考虑 \(i\) 子树 ...
- Typecho美化之网页底部增加好久不见的底部样式
好久不见之本站同款网站底部样式,效果见本站. 1.修改footer.php首先,在页脚文件footer.php文件的最下面放入以下代码: <!-- 好久不见 --> <div cla ...
- Nginx - [02] 安装部署&配置
官网下载地址:http://nginx.org/en/download.html 001 || 安装[windows] 解压之后,在命令提示符窗口启动nginx.exe 在浏览器访问80端口:loca ...
- win11 - 设置FTP服务详细教程
题记部分 一.开启FTP服务 https://blog.csdn.net/qq_42142258/article/details/131725760 二.配置FTP服务 https://blog.cs ...
- WPF无边框的一个方案(保留默认窗口的拖动、阴影等效果)
使用 WindowStyle="None" AllowsTransparency="True" 的方式达成无边框的效果有很多无法忽视的缺陷,比如失去了拖动效果. ...
- Vulnhub-DC-9靶机-SQL注入拿到账户+利用端口敲门连接ssh+信息泄露利用root脚本追加提权
一.环境搭建 选择扫描虚拟机 选择靶机路径 如果出现以下信息 如下修改,修改和虚拟机一样的版本 二.信息收集 扫ip nmap -sn 192.168.108.0/24 得到靶机ip:192.168. ...