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

G1垃圾收集器源码级深度解析:CSet、RSet与混合回收机制

G1垃圾收集器作为JDK9+的默认GC,其分区化设计可预测停顿时间特性使其成为大内存场景的首选。本文将从源码层面深入剖析G1的Collection Set(CSet)Remembered Set(RSet)并发优化线程以及Young GC、Mixed GC、Full GC三种回收模式的完整流程,助你彻底掌握G1的核心机制。


📋 文章目录

  • 一、G1核心数据结构解析
  • 二、G1的线程模型
  • 三、Young GC:年轻代回收详解
  • 四、Mixed GC:混合式回收全流程
  • 五、Full GC:全局垃圾回收
  • 六、G1关键参数配置
  • 七、总结与最佳实践

一、G1核心数据结构解析

1.1 CSet(Collection Set 回收集合)

CSet是G1垃圾收集器的核心概念之一,代表每次GC暂停时回收的一系列目标分区。

CSet的特点

  • 在任意一次收集暂停中,CSet所有分区都会被释放
  • 内部存活的对象都会被转移到分配的空闲分区中
  • 无论是Young GC还是Mixed GC,工作机制都是一致的

CSet的两种类型

类型说明
CSet of Young Collection只专注回收Young RegionSurvivor Region
CSet of Mixed Collection通过RSet计算Region中对象的活跃度,筛选回收收益最高的老年代分区

Mixed GC的准入阈值

# 活跃度阈值(默认85%),只有活跃度高于此值的分区才准入CSet-XX:G1MixedGCLiveThresholdPercent=85# CSet与整个堆的比例上限(默认10%)-XX:G1OldCSetRegionThresholdPercent=10

这意味着在混合回收中,G1会优先选择垃圾最多(回收收益最高)的老年代分区加入CSet,而非所有老年代分区。


二、G1的线程模型

2.1 App Thread(用户线程)

App Thread就是执行Java程序业务逻辑的实际线程,运行用户代码。

2.2 Concurrence Refinement Thread(并发优化线程)

这是G1中非常重要的一个后台线程,主要用来处理代间引用关系

工作原理
  1. 跨区引用检测:当赋值语句发生后,G1通过**写屏障(Write Barrier)**技术,筛选出此次赋值是否是跨Region之间的引用
  2. 日志缓冲:如果是跨区引用,在线程的内存缓冲区写一条log
  3. 缓冲区切换:一旦缓冲区写满,就重新起一块缓冲继续写,原有缓冲区进入全局缓冲区
  4. RSet更新:Concurrence Refinement Thread扫描全局缓冲区的日志,更新各个Region的RSet
关键参数
# 并发优化线程数(默认等于ParallelGCThreads)-XX:G1ConcRefinementThreads# 绿色阈值(正常状态)-XX:G1ConcRefinementGreenZone# 黄色阈值(警告状态,增加线程)-XX:G1ConcRefinementYellowZone# 红色阈值(危险状态,可能阻塞App Thread)-XX:G1ConcRefinementRedZone

注意:如果全局缓冲区日志积累过多,G1会调用更多线程处理,甚至会阻塞App Thread来处理,造成应用任务堵塞,必须避免这种现象。


三、Young GC:年轻代回收详解

3.1 Young GC触发条件

Eden区大小范围

[ -XX:G1NewSizePercent, -XX:G1MaxNewSizePercent ] = [ 整堆5%, 整堆60% ]

触发逻辑

  1. G1会计算当前Eden区回收大概需要多久时间
  2. 如果回收时间远小于-XX:MaxGCPauseMillis(默认200ms),则增加年轻代的Region继续存放新对象,不会马上触发Young GC
  3. 当G1计算的回收时间接近目标停顿时间时,触发Young GC

3.2 Young GC执行步骤

Young GC的并行任务包括:根扫描更新RSet对象复制

第一步:根扫描(Root Scanning)

主要逻辑在g1RootProcessor.cppevacuate_roots方法中:

voidG1RootProcessor::evacuate_roots(...){// 1. 处理Java根process_java_roots(closures,phase_times,worker_i);// 2. 处理JVM根process_vm_roots(closures,phase_times,worker_i);// 3. 处理String Table根process_string_table_roots(closures,phase_times,worker_i);}

处理Java根(process_java_roots):

  • 处理所有已加载类的元数据
  • 处理所有Java线程当前栈帧的引用和虚拟机内部线程

处理JVM根(process_vm_roots):

  • 处理JVM内部使用的引用(Universe和SystemDictionary)
  • 处理JNI句柄
  • 处理对象锁的引用
  • 处理java.lang.management管理和监控相关类的引用
  • 处理JVMTI(JVM Tool Interface)的引用
  • 处理AOT静态编译的引用
第二步:对象复制

对象复制的核心逻辑在do_oop_work方法中:

voidG1ParCopyClosure<barrier,do_mark_object>::do_oop_work(T*p){// 1. 判断对象是否在CSet中constInCSetState state=_g1->in_cset_state(obj);if(state.is_in_cset()){// 2. 判断对象是否已经copy过markOop m=obj->mark();if(m->is_marked()){// 已经copy过,直接找到新对象forwardee=(oop)m->decode_pointer();}else{// 没有copy过,调用copy_to_survivor_spaceforwardee=_par_scan_state->copy_to_survivor_space(state,obj,m);}// 3. 修改老对象的对象头,指向新对象地址,并将锁标志位置为11oopDesc::encode_store_heap_oop(p,forwardee)
http://www.rkmt.cn/news/1443751.html

相关文章:

  • LizzieYzy:围棋AI分析的终极免费工具 - 从入门到精通完全指南
  • 2026应届生AI智能降重工具盘点: 学术打磨+逻辑优化哪家强? - 降AI小能手
  • 思源宋体TTF字体终极指南:免费商用中文字体的7种样式快速上手
  • 2026年第二季度温州白板笔厂商联系方式深度解析与选型指南 - 2026年企业资讯
  • Palworld存档编辑终极指南:安全转换与修改游戏数据
  • Sora 2虚拟主播视频伦理风险预警:中宣部《生成式AI内容标识规范》生效前最后48小时应对方案
  • 超简单!OpenClaw 2.7.8 快速部署步骤(包含安装包)
  • 别再用MLP了!KAN模型实战:用Python复现论文核心,精度提升但速度真慢10倍?
  • 完全免费的Windows本地实时语音转文字工具:5分钟搭建你的离线会议助手
  • 2026年6月正规的供热保温管用途排行榜厂家推荐榜,预制直埋保温管/钢套钢保温管/聚氨酯泡沫保温管/高密度聚乙烯外护管保温管厂家选择指南 - 海棠依旧大
  • 036、模糊PID控制器设计
  • 如何从0基础转向大模型高薪岗位?:0基础能不能转大模型?到底怎么转?
  • 保姆级教程:Axure RP 9最新版下载、安装与汉化一步到位(附授权码获取思路)
  • 2026年6月北京企业债务重组律师咨询指南:为何专业选择至关重要 - 2026年企业资讯
  • 3分钟高效解密加密音乐:免费浏览器工具解锁各大平台音乐文件
  • 2026年6月有实力的记账报税哪家质量好排行,5家专业财税服务机构选型指南 - 海棠依旧大
  • 2026年室内体能训练设备口碑推荐榜:河北,沧州,忍者竞技赛道、校园体能训练器材、体能馆专用器材、跑酷训练器械选择指南 - 优质品牌商家
  • 2026年6月靠谱的输送机纠偏装置批发厂家推荐榜,槽型调偏托辊、锥形下调心托辊、全自动液压纠偏装置厂家选择指南 - 海棠依旧大
  • 八类数字工具实战:从BIM到IoT,如何系统性减少现场返工
  • 广州从化区高空吊装公司 TOP5 2026 口碑实力推荐 - 从来都是英雄出少年
  • 2026成都绿化养护公司实测评测:附近绿化养护电话/附近绿化养护的公司/附近绿植租赁电话/成都小区绿化公司哪家好/选择指南 - 优质品牌商家
  • 别再被CS1237的通信时序坑了!手把手教你用STM32 GPIO模拟驱动(附完整代码)
  • 2026年6月行业内石家庄无极调型檩条机定制厂家推荐榜:C/Z型钢一体机、光伏支架设备等厂家选择指南 - 海棠依旧大
  • 零基础5分钟上手:用记事本写第一个HTML网页
  • SPLIDT技术:实时流量分类的分区决策树优化
  • 【系统架构设计师】2026年上半年真题论文:论多模态大模型在移动智能测试框架中的应用
  • 2026年6月市面上非标压力容器联系方式推荐榜厂家推荐榜,储气罐/换热器/化工设备厂家选择指南 - 海棠依旧大
  • 别再死记硬背三级缓存了!反射与字节码插桩下的注入真相
  • 2026年6月正规的宜宾小型车载泵品牌哪家靠谱厂家推荐榜,HBTS80.13.90型、HBC80.16.110型、HBT60.13.90型车载泵厂家选择指南 - 海棠依旧大
  • 终极解决方案:3步解锁MPC Video Renderer专业级HDR体验深度解析