当前位置: 首页 > news >正文

G1 垃圾回收器详解 原理

🧠 一、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.hskmm.com/?act=detail&tid=33111

相关文章:

  • 【转】[C#] GlobalUsing 的使用
  • Qoder 重磅升级,推出 Quest Remote 功能,像发邮件一样将任务委派到云端
  • 2025 年预制舱生产厂家最新推荐排行榜:深度剖析行业领军企业,助力客户精准选购优质产品光伏/电力/模块化/低压/高压/防爆预制舱厂家推荐
  • 2025国际冷链运输推荐腾翼搏时,专业温控医药物流供应商!
  • 2025连铸机设备推荐:瑞熠机械制造,专业生产优质厂家!
  • 2025机电安装优质厂家推荐:华芃机电,专业覆盖多领域安装服务!
  • 【SPIE出版 | ISSN已确定 | 连续4届稳定见刊检索】第五届计算机图形学、人工智能与数据处理国际学术会议 (ICCAID 2025)
  • 2025年低温高湿解冻设备厂家推荐排行榜,专业解冻技术与高效服务的行业首选!
  • 第一周算法设计作业
  • C++基本编程1——数位分离问题
  • 2025高精度流量计厂家推荐:弗罗迈测控系统,技术领先品质卓越!
  • 存储过程循环替代游标
  • 2025多功能防水篷布厂家推荐:成硕达塑业,品质卓越用途广泛!
  • 钉钉接入业务系统在windows系统下的web端无法加载图片
  • 2025危险品运输推荐盘锦畅奥,专业安全服务值得信赖!
  • 2025精密磨床及CNC加工推荐:东莞市品之豪金属制品专业定制!
  • AI元人文构想:一种负责任的文明演化框架研究报告
  • 少时诵诗书上说试试说试试
  • 2025 消防培训学校最新推荐榜:实训实力解析,附选择指南消防考证培训学校推荐
  • 2025年工作服厂家推荐排行榜,春夏秋冬季工作服,工人工作服,车间工作服,防静电工作服公司推荐!
  • JavaScript 中处理日期格式化
  • 2025年在线粘度计厂家推荐排行榜,实验室在线粘度计,工业在线粘度计,高精度在线粘度计公司推荐!
  • 找到M3U8直播源的方法
  • 2025年临床样本冷链运输服务商推荐榜单,专业冷链物流,生物样本运输公司精选!
  • 2025年网格川字塑料托盘厂家推荐排行榜,耐用抗压,仓储物流首选!
  • 基于MATLAB的FIR和IIR低通/带通滤波器实现
  • 基于模糊C均值聚类(FCM)的图像分割技术
  • 2025年广告衫厂家推荐排行榜,防静电/劳保/国网/餐厅/工厂/电工/防酸碱/电力/车间/航空/员工/文化衫/T恤/POLO衫/冲锋衣公司推荐!
  • 2025年管道安装厂家权威推荐榜单:专业施工与优质服务口碑之选!
  • 2025年流量控制器厂家推荐排行榜,气体流量控制器,液体流量控制器,智能流量控制器公司精选!