当前位置: 首页 > 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.gsyq.cn/news/23045.html

相关文章:

  • Qoder 重磅升级,推出 Quest Remote 功能,像发邮件一样将任务委派到云端
  • 【SPIE出版 | ISSN已确定 | 连续4届稳定见刊检索】第五届计算机图形学、人工智能与数据处理国际学术会议 (ICCAID 2025)
  • 2025多功能防水篷布厂家推荐:成硕达塑业,品质卓越用途广泛!
  • Windows系统Web端钉钉打开H5链接无法展示图片
  • 2025危险品运输推荐盘锦畅奥,专业安全服务值得信赖!
  • AI元人文构想:一种负责任的文明演化框架研究报告
  • 少时诵诗书上说试试说试试
  • 找到M3U8直播源的方法
  • 基于模糊C均值聚类(FCM)的图像分割技术
  • 2025年管道安装厂家权威推荐榜单:专业施工与优质服务口碑之选!
  • 2025年聚乙烯多功能防水篷布厂家推荐排行榜,耐用防水,户外必备优质品牌!
  • uml建模复习心得 - 2305
  • SQL Server中关于 INSERTED.Id 与 SCOPE_IDENTITY() 获取新增数据的Id
  • 2025年视频拍摄服务权威推荐榜:创意剪辑与高清画质完美结合,打造视觉盛宴!
  • pytorch p66实训二
  • 2025年网络推广服务商权威推荐榜单,SEO优化,SEM营销,社交媒体推广,内容营销公司推荐
  • 日志分析-Tomcat日志分析
  • 2025年手持式光谱仪厂家权威推荐榜单:精准检测与便携操作的行业首选!
  • Notepad++中替换时保留分组字符
  • 2025年铝单板厂家推荐排行榜,氟碳/木纹/冲孔/外墙/雕花/异形/双曲/弧形/雕刻铝单板公司精选!
  • 2025年机电安装厂家权威推荐榜单:覆盖管道/电气/生物医药工厂/暖通空调/空压系统/纯水系统/厂房通风/车间配电/机械设备安装,专业服务之选!
  • 03-转义字符
  • 2025 年最新推荐集装箱拖车供应厂家权威榜单:全方位解析优质企业实力,助力高效物流运输选择
  • Nginx常用配置
  • 单载波系统QPSK的频偏估计算法
  • 2025 最新瓷砖厂家排行榜出炉:精选优质品牌权威推荐,助力家居与工程选购决策
  • 2025年连铸机设备厂家推荐排行榜,扇形段,大包回转台,钢包中间罐,结晶器总成,振动装置,尾坯夹送装置,移动平台,拉矫机,引锭杆,输送辊道,横向移钢机,钢坯液压剪公司精选!
  • 2025 人力资源管理系统公司最新推荐榜单:聚焦前沿技术与服务实力,解锁企业人效革新路径
  • n8n零基础入门:5分钟搭建你的第一个自动化工作流
  • Hudi系列:表类型(Table Query Types)