G1 垃圾回收器详解 原理

news/2025/10/18 21:30:41/文章来源:https://www.cnblogs.com/jelly12345/p/19148395

🧠 一、G1 的设计目标

G1 = Garbage First Collector
👉 “优先回收垃圾最多的区域(Region)”

设计初衷:

  • 面向 大堆内存(4GB~几百GB)

  • 保证 可预测的低停顿时间(pause time goal)

  • 支持 并行、并发、分代回收

  • 避免全堆扫描、压缩(fragmentation)问题


🧩 二、G1 的内存结构(核心区别)

传统 GC(如 Parallel / CMS)堆分代如下:

 
| Young | Old |

G1 将整个堆拆成很多小块(Region),每个大小固定(如 1MB、2MB、4MB)。

 
Heap = 一堆大小相等的 Region 每个 Region 可扮演不同角色: [ E ] Eden [ S ] Survivor [ O ] Old [ H ] Humongous(超大对象)

示意:

 
| E | E | S | O | O | H | E | O | S | H | ...
  • 每个 Region 可动态分配为 Eden、Survivor、Old,不再固定比例。

  • Region 是独立回收的基本单位

  • Humongous Region:对象超过 Region 一半大小(> 0.5 * RegionSize)就放这里。

🔹 这样,G1 不再是“按代”整体扫描,而是:

“找出垃圾最多的 Region 集合,优先清理它们(Garbage First)”。


⚙️ 三、G1 的主要阶段(工作流程)

整个生命周期分为:

 
Young GC ↓ Concurrent Marking(并发标记) ↓ Mixed GC ↓ Full GC(极端 fallback)

(1) Young GC(年轻代收集)

触发条件:Eden 区满。
流程:

  1. STW(Stop The World)暂停。

  2. 标记存活对象(根可达)。

  3. 复制存活对象到 Survivor / Old Region。

  4. 回收整个 Eden Region。

✅ 优点:Eden 回收后直接清空;复制算法,天然压缩内存碎片。


(2) Concurrent Marking(并发标记阶段)

触发条件:堆使用比例超过阈值(默认 45%)。

过程:

  1. 初始标记(STW):标记 GC Roots 直接可达对象。

  2. 并发标记(Concurrent):GC 与应用线程同时运行,扫描整个堆。

  3. 再标记(STW):修正漏标对象(SATB)。

  4. 筛选统计(Remark):计算每个 Region 的“回收收益”。

    • 收益 = 可回收空间 / 执行成本

目的:建立一份“Region 垃圾地图”,为下一次回收做准备。


(3) Mixed GC(混合回收)

在并发标记完成后触发。

不仅回收年轻代,还回收部分 Old Region(优先垃圾比例高的那些)。

过程:

  1. 根据收益排序,选出一批最值得清理的 Old Region。

  2. STW 复制 + 回收这些 Region。

  3. 重复多次 Mixed GC,直到收益不明显或达目标暂停时间。


(4) Full GC(极端情况)

当:

  • 堆内存碎片严重;

  • G1 无法满足 pause time;

  • 元空间溢出;

才会触发 单线程的 Full GC(最慢)。


🔄 四、G1 的关键机制

1️⃣ Remembered Set (RSet)

记录跨 Region 的引用。

  • G1 不需要全堆扫描老年代 → 年轻代 GC 时,只扫描记录在 RSet 中的老年代引用。

  • 实现方式:卡表(Card Table),每个 512B 的区域都有 dirty bit。

2️⃣ SATB(Snapshot At The Beginning)

在并发标记阶段,为避免漏标:

  • 记录标记开始时的堆快照;

  • 对象的删除(write barrier)会把原值加入标记队列。

3️⃣ Copy + Compact(天然压缩)

回收采用复制算法:

  • 存活对象复制到新 Region;

  • 旧 Region 直接清空;
    ✅ 避免 CMS 碎片问题。


🧮 五、G1 调优参数详解

参数含义建议
-XX:+UseG1GC 开启 G1 JDK9+ 默认启用
-XX:MaxGCPauseMillis=<N> 目标最大停顿时间 (默认 200ms) 可调整为 100~500ms
-XX:InitiatingHeapOccupancyPercent 启动并发标记的堆占用阈值(默认 45%) 调大可减少 GC 频率
-XX:G1HeapRegionSize Region 大小 (1MB~32MB,2 的幂次方) 一般自动选择
-XX:ConcGCThreads 并发标记线程数 默认 = CPU/4
-XX:ParallelGCThreads 并行 GC 线程数 默认 = CPU
-XX:+G1UseAdaptiveIHOP 动态调整 IHOP 阈值 推荐开启
-XX:G1ReservePercent 预留空间防止晋升失败(默认 10%) 10~20%

📊 六、G1 与 CMS 对比

对比项CMSG1
内存结构 分代 (固定 Eden/Survivor/Old) Region 动态分配
算法 标记-清除(不压缩) 标记-复制(压缩)
碎片 易产生碎片 自动整理
并发标记 有(SATB)
回收粒度 整个代 Region 级别(可选择最优)
停顿可控 可预测(Pause Target)
吞吐量 稍高 稍低
适用场景 中等堆(<8GB) 大堆(>8GB)、低延迟服务

🧰 七、G1 GC 日志与分析(简版)

开启日志:

 
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -Xlog:gc*:file=gc.log:time,uptime,level,tags

示例:

 
[GC pause (G1 Evacuation Pause) (young) 256M->128M(1024M), 0.0456789 secs] [GC concurrent-mark-start] ...

分析工具:

  • jstat -gcutil <pid> 1s

  • GC Easy、GCeasy.io、GarbageCat、JClarity Censum


💡 八、G1 调优思路总结

目标调优方向
停顿太频繁 调大 MaxGCPauseMillis 或减少并发标记触发频率
吞吐下降 调整并发线程数,适当增加 Region 大小
晋升失败 增大 G1ReservePercentXmx
内存碎片 确认 Humongous 对象比例(>50% region)太高时需拆分对象或压缩

🧭 九、总结记忆图

 
┌────────────────────────────┐│ G1 Garbage Collector │└────────────┬──────────────┘│┌───────────┴────────────┐│ │Region-based Heap Pause-time Target(E/S/O/H Region) (MaxGCPauseMillis)│ │▼ ▼┌──────────────┐ ┌────────────────┐│ Young GC │ │ Concurrent Mark││ (Copy) │ │ + Mixed GC │└──────────────┘ └────────────────┘│ │▼ ▼Compact Selective GC(No fragmentation) (Garbage-First Regions)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/939016.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】[C#] GlobalUsing 的使用

【转】[C#] GlobalUsing 的使用转自:豆包ai 在 C# 10 及以上版本中,Global Using 指令(全局 using 指令)是一项简化代码的新特性,允许在项目级别定义全局生效的 using 语句,无需在每个代码文件中重复声明。这能显…

Qoder 重磅升级,推出 Quest Remote 功能,像发邮件一样将任务委派到云端

远程委派功能的上线,将开发者从这些“后台噪音”中解放出来,回归编码的纯粹乐趣与价值创造的核心。今天,在 2025 云栖大会的现场,Qoder 负责人丁宇宣布,Qoder 核心功能 Quest 模式迎来里程碑式升级,推出全新的“…

2025 年预制舱生产厂家最新推荐排行榜:深度剖析行业领军企业,助力客户精准选购优质产品光伏/电力/模块化/低压/高压/防爆预制舱厂家推荐

引言当前新能源产业与智能电网建设飞速发展,预制舱作为核心设备需求激增,但行业乱象凸显。部分厂家缺乏核心技术,产品在机械强度、抗风载雪载等关键指标上不达标;有的产能有限,无法满足大型项目供货需求,导致工期…

2025国际冷链运输推荐腾翼搏时,专业温控医药物流供应商!

2025国际冷链运输推荐腾翼搏时,专业温控医药物流供应商!随着全球生物医药产业的快速发展,药品、临床样本、CAR-T细胞、蛋白、诊断试剂等高价值生物制品的运输需求日益增加。这些产品对温度控制要求极高,任何细微的…

2025连铸机设备推荐:瑞熠机械制造,专业生产优质厂家!

2025连铸机设备推荐:瑞熠机械制造,专业生产优质厂家!引言随着工业技术的不断进步,连铸机设备在钢铁行业的应用越来越广泛。然而,当前连铸机设备领域面临着诸多技术挑战,如何选择合适的设备供应商成为企业关注的重…

2025机电安装优质厂家推荐:华芃机电,专业覆盖多领域安装服务!

2025机电安装优质厂家推荐:华芃机电,专业覆盖多领域安装服务!当前机电安装领域的技术挑战随着工业和制造业的快速发展,机电安装领域面临着诸多技术挑战。从管道安装到电气安装,再到生物医药工厂机电安装、暖通空调…

【SPIE出版 | ISSN已确定 | 连续4届稳定见刊检索】第五届计算机图形学、人工智能与数据处理国际学术会议 (ICCAID 2025)

第五届计算机图形学、人工智能与数据处理国际学术会议(ICCAID 2025)将于 2025年10月31日-11月2日在中国南昌举行。【南昌航空大学,多所高校联合支持】 【南昌航空大学,多所高校联合支持 | 连续4届稳定见刊检索】 第…

2025年低温高湿解冻设备厂家推荐排行榜,专业解冻技术与高效服务的行业首选!

2025年低温高湿解冻设备厂家推荐排行榜,专业解冻技术与高效服务的行业首选!随着食品加工行业的快速发展,低温高湿解冻设备在保障食品安全和提高生产效率方面发挥着越来越重要的作用。选择一款性能卓越、服务优质的低…

第一周算法设计作业

1.主要编码和规范: 命名是代码的 “标签”,比如变量、函数、文件名,必须让看到的人立刻知道它的用途,避免用a/b/c、temp这种模糊的名字。格式乱的代码就像 “乱糟糟的笔记”,即使逻辑对,也很难读。核心是用 “缩…

C++基本编程1——数位分离问题

数位分离问题 什么是数位分离呢? 3位数520,如何取得其个位、十位、百位的问题 模运算符 % 和 while循环的组合实现最简单数位分离逻辑↓ 在这个场景中,我们使用了模运算符%,结合while循环进行数位分离。int n = 12…

2025高精度流量计厂家推荐:弗罗迈测控系统,技术领先品质卓越!

2025高精度流量计厂家推荐:弗罗迈测控系统,技术领先品质卓越!随着工业自动化和智能化的不断发展,高精度流量计在各个行业中的应用越来越广泛。无论是热式、模拟式、数字式、高压、高温、微小、大流量、耐腐蚀、多气…

存储过程循环替代游标

select ids=IDENTITY(int,1,1),flag=0,CarNum into #temp from CodeN008_Standard.dbo.tbMergeInsdeclare @min_id int select @min_id=MIN(ids) from #temp where flag=0while @min_id is not null beginselect Car…

2025多功能防水篷布厂家推荐:成硕达塑业,品质卓越用途广泛!

2025多功能防水篷布厂家推荐:成硕达塑业,品质卓越用途广泛!随着科技的不断进步和市场需求的多样化,多功能防水篷布在各个领域的应用越来越广泛。从帐篷、汽车覆盖到宴会布置、农林用具,再到重型机器防护,多功能防…

Windows系统Web端钉钉打开H5链接无法展示图片

钉钉依据DingTalkSchema接入H5消息通知,在MAC电脑端、IOS手机端、Android手机端皆可实现正常跳转,在Web端打开的链接图片无法显示。场景 现有业务系统A,现将业务系统内的审批消息通知根据DingTalkSchema接入钉钉系统…

2025危险品运输推荐盘锦畅奥,专业安全服务值得信赖!

2025危险品运输推荐盘锦畅奥,专业安全服务值得信赖!随着全球工业和物流行业的快速发展,危险品运输的需求日益增加。然而,危险品运输领域面临着诸多技术挑战和安全隐患,如何确保危险品的安全、高效运输成为行业关注…

2025粉末冶金制品优质厂家推荐:鸿瑞粉末冶金,专业定制品质卓越!

2025粉末冶金制品优质厂家推荐:鸿瑞粉末冶金,专业定制品质卓越!当前粉末冶金制品领域的技术挑战随着制造业的快速发展,粉末冶金制品和粉末冶金零件在各个行业中的应用越来越广泛。然而,这一领域也面临着诸多技术挑…

ask见到过哟啊施工i为

ask见到过哟啊施工i为 read.bdccfjv.cn/article/details/502116.shtmlm.bdccfjv.cn/article/details/463788.shtmlm.dmsulmt.cn/article/details/810661.shtmlm.bdccfjv.cn/article/details/221243.shtmlm.bdccfjv.cn/…

2025精密磨床及CNC加工推荐:东莞市品之豪金属制品专业定制!

2025精密磨床及CNC加工推荐:东莞市品之豪金属制品专业定制!当前精密磨床及CNC加工领域的技术挑战随着制造业的快速发展,精密磨床和CNC加工技术在各个行业中的应用越来越广泛。然而,这些技术也面临着诸多挑战。特别…

AI元人文构想:一种负责任的文明演化框架研究报告

AI元人文构想:一种负责任的文明演化框架研究报告 一、引言:AI时代的价值治理新范式 人工智能技术的快速发展将人类文明推向新的历史阶段。在智能系统能力持续增强的背景下,确保AI与人类价值体系的协调共生成为重要议…

少时诵诗书上说试试说试试

少时诵诗书上说试试说试试m.bdccfjv.cn/article/details/203148.shtmlm.dmsulmt.cn/article/details/353976.shtmlread.dmsulmt.cn/article/20251017/details/98235598.shtmlread.dmsulmt.cn/article/20251017/details…