Java 中的 CMS 和 G1 垃圾收集器如何维持并发的正确性?
Java 中的 CMS 和 G1 垃圾收集器如何维持并发的正确性?
CMS(Concurrent Mark-Sweep)和 G1(Garbage-First)垃圾收集器是两种低延迟的垃圾回收器,它们通过并发阶段与应用线程(Mutator)同时运行,以减少暂停时间。为了维持并发垃圾回收的正确性,二者采取了不同的技术和策略。
1. CMS 垃圾收集器的并发正确性维护
1.1 基本工作原理
CMS 使用“标记-清除”算法,主要阶段包括:
- 初始标记(STW):标记 GC Roots。
- 并发标记:从 GC Roots 开始,遍历对象图,标记所有可达对象。
- 重新标记(STW):处理并发标记过程中新产生的引用变化。
- 并发清理:清理未标记的垃圾对象。
1.2 并发正确性维护方法
写屏障(Write Barrier):
- 在 Mutator 修改引用关系时,记录修改到一个“卡表”(Card Table)或“脏卡”列表。
- 确保并发标记阶段的新引用可以被重新标记阶段捕获。
增量更新(Incremental Update):
- Mutator 在标记阶段修改了指向未标记对象的引用,CMS 会将新创建的引用加入到待标记队列。
Stop-The-World 重新标记:
- 通过短暂停顿扫描卡表中的脏卡,捕获并发标记期间可能遗漏的引用变化,确保标记阶段的准确性。
2. G1 垃圾收集器的并发正确性维护
2.1 基本工作原理
G1 使用“标记-整理”算法,将堆分为多个固定大小的分区(Region),垃圾回收按分区优先级进行。主要阶段包括:
- 初始标记(STW):标记 GC Roots。
- 并发标记:从 GC Roots 遍历对象图,标记可达对象。
- 最终标记(STW):处理并发标记阶段的引用变化。
- 清理与整理:回收垃圾对象,并压缩分区。
2.2 并发正确性维护方法
SATB(Snapshot-At-The-Beginning):
- G1 使用 SATB 技术维持并发标记的正确性。
- 在标记开始时,记录 Mutator 的对象状态快照,而不是跟踪所有引用的变化。
- Mutator 如果删除了对象的引用,被删除的对象仍会被视为可达,从而保证并发标记阶段不遗漏。
写屏障(Write Barrier):
- 在对象的引用发生变化时,通过写屏障将旧引用添加到 SATB 的缓冲区中。
- 确保即使 Mutator 修改了对象图,回收器仍能完整标记。
最终标记(Final Remark):
- 在并发标记结束后,通过短暂停顿处理 SATB 缓冲区中的变更记录,确保标记结果一致。
3. CMS 和 G1 在并发正确性上的比较
特性 | CMS | G1 |
---|---|---|
算法 | 标记-清除 | 标记-整理 |
引用变化的处理 | 增量更新(Incremental Update) | 快照集(SATB) |
写屏障 | 修改引用时记录脏卡 | 修改引用时记录旧引用 |
额外的 STW 停顿 | 重新标记阶段 | 最终标记阶段 |
并发标记的正确性保障 | 卡表记录脏区域,重新扫描 | SATB 缓冲区记录引用变化 |
实现复杂性 | 相对较低 | 较高 |
4. 总结
- CMS通过增量更新和卡表记录引用变化,使用重新标记阶段来确保并发标记的正确性。它更简单,但会有内存碎片和“Concurrent Mode Failure”问题。
- G1通过 SATB 快照机制记录标记起点的状态,结合最终标记阶段的补充处理,确保并发标记的准确性。G1 的实现更复杂,但其分区化设计和整理过程能够有效减少内存碎片,适合大堆和低延迟场景。
Java 中的 CMS 和 G1 垃圾收集器如何维持并发的正确性?的更多相关文章
- Java中基于HotSpot虚拟机的垃圾收集器
名称 过程 优缺点 Serial 进行垃圾收集时,必须暂停其他所有的工作进程,直到它收集结束.是一个单线程收集器. Stop the world. 新生代收集器. 手工设置新生代的大小:-Xmn Ed ...
- G1 垃圾收集器入门
最近在复习Java GC,因为G1比较新,JDK1.7才正式引入,比较艰难的找到一篇写的很棒的文章,粘过来mark下.总结这篇文章和其他的资料,G1可以基本稳定在0.5s到1s左右的延迟,但是并不能保 ...
- 转 G1垃圾收集器入门
转自:http://blog.csdn.net/zhanggang807/article/details/45956325 最近在复习Java GC,因为G1比较新,JDK1.7才正式引入,比较艰难的 ...
- G1垃圾收集器入门-原创译文
G1垃圾收集器入门-原创译文 原文地址 Getting Started with the G1 Garbage Collector 概览 目的 本文介绍了如何使用G1垃圾收集器以及如何与Hotspot ...
- G1 垃圾收集器架构和如何做到可预测的停顿(阿里)
CMS垃圾回收机制 参考:图解 CMS 垃圾回收机制原理,-阿里面试题 CMS与G1的区别 参考:CMS收集器和G1收集器优缺点 写这篇文章是基于阿里面试官的一个问题:众所周期,G1跟其他的垃圾回收算 ...
- Java垃圾收集器——Serial,Parallel,CMS,G1收集器概述
1.概述 Java应用启动的时候,除了配置Xms以及Xmx参数(Xmx:InitialHeapSize, Xms:MaxHeapSize),还需要选择合适的垃圾收集器. 截止Jdk1.8,共提供了7款 ...
- 深入理解 Java G1 垃圾收集器--转
原文地址:http://blog.jobbole.com/109170/?utm_source=hao.jobbole.com&utm_medium=relatedArticle 本文首先简单 ...
- G1垃圾收集器和CMS垃圾收集器 (http://mm.fancymore.com/reading/G1-CMS%E5%9E%83%E5%9C%BE%E7%AE%97%E6%B3%95.html#toc_8)
参考来源 JVM 体系架构 堆/栈的内存分配 静态和非静态方法的内存分配 CMS 回收算法 应用场景 CMS 垃圾收集阶段划分(Collection Phases) CMS什么时候启动 CMS缺点 G ...
- 【JVM】7、深入理解Java G1垃圾收集器
本文首先简单介绍了垃圾收集的常见方式,然后再分析了G1收集器的收集原理,相比其他垃圾收集器的优势,最后给出了一些调优实践. 一,什么是垃圾回收 首先,在了解G1之前,我们需要清楚的知道,垃圾回收是什么 ...
- 转:深入理解Java G1垃圾收集器
本文首先简单介绍了垃圾收集的常见方式,然后再分析了G1收集器的收集原理,相比其他垃圾收集器的优势,最后给出了一些调优实践. 一,什么是垃圾回收 首先,在了解G1之前,我们需要清楚的知道,垃圾回收是什么 ...
随机推荐
- 一文搞懂 结构伪类 :nth-child && :nth-of-typ
结构伪类 从使用结构伪类的选择器开始 往上一层父辈开始筛选 从使用结构伪类的选择器开始 往上一层父辈开始筛选 从使用结构伪类的选择器开始 往上一层父辈开始筛选 不是从左往右选择 不是先父辈后筛选子类 ...
- 报错sql_mode=only_full_group_by
这个问题的原因是,在这种模式下,sql分组时默认只能select + 分组字段以及聚合函数,相当于做一个规范检查 但很多时候并不需要这个检查,因为真实sql中,分组后很多字段是1对1的,比如分组id, ...
- Asp.Net Core3.0 微信转账到零钱
参考文档: 微信付款到零钱开发文档:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_2 用于向微信用户个人付款, ...
- [CERC2014] Parades 题解
感觉长脑子了. 考虑在路线两端点的 \(lca\) 计算贡献,那么线段可以分两类: \(u\) 为 \(v\) 祖先. \(u,v\) 互不为祖先. 设 \(dp_i\) 表示只考虑 \(i\) 子树 ...
- ABB机器人IRB 6700维修保养技巧
通过与子锐机器人维修保养服务定制合理的机器人保养工作,可以确保ABB机器人IRB 6700的持续稳定运行,延长其使用寿命,为企业的生产提供有力保障. 一.ABB机器人IRB 6700日常检查与维护 外 ...
- c# 删除文件夹最快的函数方法 无视占用 直接删除
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/17270147.html 代码如下,直接通过cmd调用dos命令进行删除 public stat ...
- Java开发中long类型转换json传递到前端后精度丢失问题
将文章的id由long类型手动改为String类型(需要修改表结构); 可以使用Jackson进行序列化解决
- Typecho获取当前页面加载完成速度时间
判断当前页面加载是否快速,通常是直接在浏览器中访问网站,看自己的直观感受是否快速.而客观的方法则是计算具体的页面加载时间并显示出来给看. 1.在当前主题的functions.php文件添加下面的代码: ...
- Linux - 禁ping & 开放访问端口
适用于Linux操作系统 禁ping 1.编辑 /etc/sysctl.conf 文件,文件末尾增加如下内容后,保存退出. net.ipv4.icmp_echo_ignore_all = 1 2.在命 ...
- AI技术革命,工作效率10个最佳AI工具
AI技术革命,工作效率10个最佳AI工具 目 录 1. Vidwud AI PowerPoint生成器... 4 2. Vidnoz AI音乐视频生成器... 5 3. ...