当前位置: 首页 > 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.jsqmd.com/news/932421/

相关文章:

  • 3个步骤如何用GetQzonehistory找回你的QQ空间青春记忆
  • DLSS Swapper:5分钟完成游戏性能优化的终极指南
  • 【Sora 2广告商业化临界点报告】:为什么92%的营销团队卡在第3关?附Gartner认证评估矩阵
  • 2026年6月热门的扬州燃气燃烧机厂家有哪些推荐榜,一体式低氮燃烧机、分体式比例调节燃烧机、全自动燃气燃烧机、工业级大功率燃烧机、智能变频燃烧机选择指南 - 海棠依旧大
  • LizzieYzy:围棋AI分析的终极免费工具 - 从入门到精通完全指南
  • Sora 2生物动画生成:为什么92%的科研团队仍在用V1旧管线?3个致命兼容盲区正在拖垮你的论文复现效率
  • 2026应届生AI智能降重工具盘点: 学术打磨+逻辑优化哪家强? - 降AI小能手
  • Sora 2培训视频生成必须立刻升级的4项配置——否则下周起将触发OpenAI新内容策略熔断机制
  • 思源宋体TTF字体终极指南:免费商用中文字体的7种样式快速上手
  • 2026年第二季度温州白板笔厂商联系方式深度解析与选型指南 - 2026年企业资讯
  • 告别针孔:用Scaramuzza多项式模型搞定全向相机标定(附Python代码)
  • 2026年5月高纯六氟化硫、电子级六氟化硫及工业级六氟化硫厂家推荐榜与选择指南 - 海棠依旧大
  • Harness 中的请求优先级反转避免协议
  • Linux编译C++项目内存爆了?手把手教你用Swap分区救急(附Ubuntu/CentOS配置命令)
  • 2026杭州靠谱狗粮技术解析:杭州保护肠胃狗粮/杭州全价狗粮/杭州去泪痕狗粮/杭州夹心狗粮/杭州奶糕狗粮/杭州小型犬狗粮/选择指南 - 优质品牌商家
  • 不列颠哥伦比亚大学与亚马逊联合研究揭示如何让AI学会“守规矩“
  • 实战复盘:用SARIMAX预测光伏板温度,我的Matplotlib可视化踩了哪些坑?
  • Sora 2虚拟主播视频伦理风险预警:中宣部《生成式AI内容标识规范》生效前最后48小时应对方案
  • Palworld存档编辑终极指南:安全转换与修改游戏数据
  • 2026年江浙沪压缩机回收服务商排行及选择参考:浙江,上海,江苏,电子厂设备回收/电机回收/电梯回收/电缆回收/选择指南 - 优质品牌商家
  • Sora 2视频物理引擎深度拆解:5大不可绕过的刚体/流体耦合缺陷与工业级修复方案
  • 2026年6月专业的漯河市制造业销售精准获客难题怎么选厂家推荐榜,智能获客系统、SCRM平台、数字营销解决方案、广告投放优化工具厂家选择指南 - 海棠依旧大
  • 超简单!OpenClaw 2.7.8 快速部署步骤(包含安装包)
  • 别再用MLP了!KAN模型实战:用Python复现论文核心,精度提升但速度真慢10倍?
  • 2026年Q2成都考研机构联系服务合规排行一览:成都本地考研辅导电话、成都正规考研集训营、成都线下考研培训、成都考研培训哪家好选择指南 - 优质品牌商家
  • 零基础 Windows 部署 Hermes 实操步骤详解(含安装包)
  • AI 电动滑板控制器智能功率 MOSFET 精准选型方案
  • 2026年6月正规的供热保温管用途排行榜厂家推荐榜,预制直埋保温管/钢套钢保温管/聚氨酯泡沫保温管/高密度聚乙烯外护管保温管厂家选择指南 - 海棠依旧大
  • 完全免费的Windows本地实时语音转文字工具:5分钟搭建你的离线会议助手
  • 终极NCM格式解密工具:3分钟快速解锁网易云音乐,实现跨平台播放自由