Java面试之JVM垃圾回收算法汇总-Java面试题

JVM垃圾回收算法考察重点是实际应用场景与设计原理:CMS为低延迟用标记-清除而非标记-整理以避免STW;G1通过Region分区和RSet实现混合回收;ZGC与Shenandoah借助读屏障和指针着色/转发实现并发整理。

Java面试中问到JVM垃圾回收算法,不是让你背诵“标记-清除”“复制”“标记-整理”这些名词,而是看你能不能说清:每种算法在什么内存区域、什么场景下被实际使用,以及为什么选它而不是别的。HotSpot虚拟机的GC实现和理论算法之间存在关键差异——比如“复制算法”在新生代用的是 Survivor 区的两个半区(S0 和 S1),但实际触发条件、晋升阈值、动态年龄判定等细节,才是面试官真正想确认你是否真懂的地方。

为什么CMS不使用标记-整理算法?

CMS(Concurrent Mark-Sweep)的目标是尽可能减少停顿时间,适用于老年代。它采用的是标记-清除算法,而非标记-整理,原因很实际:

  • 标记-整理 需要移动存活对象,意味着必须暂停所有应用线程(STW),违背CMS低延迟的设计初衷
  • 标记-清除 虽然会产生内存碎片,但CMS通过预留 ConcGCThreads 并发清理,且配合 UseCMSCompactAtFullCollection(已废弃)或 CMSScavengeBeforeRemark 缓解问题
  • 一旦碎片过多触发 Concurrent Mode Failure,JVM会退化为 Serial Old 进行 Full GC —— 此时才真正执行标记-整理,但代价是长时间STW

G1的Region分区如何改变传统算法边界?

G1不再严格区分年轻代/老年代的连续内存空间,而是把堆划分为多个固定大小的 Region(默认 1~32MB)。它的回收逻辑融合了多种策略:

  • 年轻代回收(Young GC)本质是复制算法:从所有 Eden Region + 部分 Survivor Region 复制存活对象到新的 Survivor 或 Old Region
  • 混合回收(Mixed GC)则按 G1HeapRegionSize 和 G1MixedGCCountTarget 动态选择一批 Old Region,对其中的存活对象执行复制(类似复制算法),同时合并空闲 Region
  • 它不追求“一次清理整个老年代”,而是基于 Remembered Set(RSet) 快速识别跨 Region 引用,避免全堆扫描 —— 这才是 G1 降低 STW 的核心技术,不是算法本身多先进

ZGC 和 Shenandoah 的“并发整理”怎么绕过传统限制?

ZGC 和 Shenandoah 都宣称“几乎不 STW”,核心突破点不在算法名称,而在内存访问层面的改造:

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » Java面试之JVM垃圾回收算法汇总-Java面试题
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4029730+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4029730+
  • 本周更新: 0+
  • 最后更新: 2026-03-16