news 2026/5/13 7:40:02

【大白话说Java面试题 第47题】【JVM篇】第7题:Young GC 和 Full GC 分别采用什么算法?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【大白话说Java面试题 第47题】【JVM篇】第7题:Young GC 和 Full GC 分别采用什么算法?

📌PDF:大白话说Java面试题 — 02-JVM篇

第7题:Young GC 和 Full GC 分别采用什么算法

📚回答:

  • 核心概念
    JVM 的垃圾回收机制针对不同代(年轻代和老年代)采用了不同的算法,以提高回收效率和减少性能开销。以下是 Young GC 和 Full GC 使用的具体算法及其特点:

1. Young GC 的算法:标记-复制(Mark-Copy)
  • 定义

    • 将年轻代划分为一个较大的 Eden 区和两个较小的 Survivor 区(From 和 To)。
    • 每次只使用 Eden 区和其中一个 Survivor 区,当内存不足时,触发 Young GC:
      1. 标记存活对象(即未被回收的对象)。
      2. 将存活对象从 Eden 区和 From Survivor 区复制到 To Survivor 区。
      3. 清理 Eden 区和 From Survivor 区的所有空间。
      4. 交换 From 和 To Survivor 区的角色,为下一次 GC 做准备。
  • 优点

    • 高效清理短生命周期的对象,避免内存碎片化问题。
  • 缺点

    • 需要额外的 Survivor 区空间,导致内存利用率较低。

    💡代码示例
    以下伪代码展示了标记-复制算法的基本流程:

// Eden 区和 Survivor 区Object[]eden=newObject[10];Object[]survivorFrom=newObject[5];Object[]survivorTo=newObject[5];// 标记存活对象并复制到 To Survivor 区for(Objectobj:eden){if(isAlive(obj)){copyToSurvivor(survivorTo,obj);}}// 清理 Eden 区和 From Survivor 区eden=newObject[10];// 清空 Eden 区survivorFrom=newObject[5];// 清空 From Survivor 区

2. Full GC 的算法:标记-清除(Mark-Sweep)或标记-整理(Mark-Compact)
  • 标记-清除(Mark-Sweep)

    • 过程
      1. 标记所有存活对象。
      2. 统一回收未标记的对象(垃圾对象)。
    • 优点
      • 实现简单,适合一次性清理大量垃圾对象。
    • 缺点
      • 容易产生内存碎片,影响后续分配大对象的效率。
  • 标记-整理(Mark-Compact)

    • 过程

      1. 标记所有存活对象。
      2. 将所有存活对象向内存的一端移动,压缩内存空间。
      3. 清理边界以外的空间。
    • 优点

      • 避免内存碎片化问题,适合频繁分配大对象的场景。
    • 缺点

      • 整理过程需要额外的时间开销,性能略低于标记-清除。

      💡源码解析
      HotSpot VMSerialGCParallelGC默认使用标记-整理算法,而CMS使用标记-清除算法。具体实现可以参考GenCollectedHeapConcurrentMarkSweepGeneration模块。


3. 对比总结
算法适用场景优点缺点
标记-复制年轻代(短生命周期对象)高效清理垃圾,无内存碎片需要额外的 Survivor 区,内存利用率低
标记-清除老年代(少量垃圾对象)实现简单,适合一次性清理大量垃圾易产生内存碎片
标记-整理老年代(频繁分配大对象)避免内存碎片,适合长期运行的应用整理过程耗时较长

💡面试官视角

  • 面试官可能会问“为什么年轻代使用标记-复制算法?”答:因为年轻代中大多数对象是短生命周期的,标记-复制算法能高效清理垃圾且无碎片问题。
  • 面试官可能会追问“标记-清除和标记-整理的区别是什么?”答:标记-清除直接回收垃圾,容易产生碎片;标记-整理会压缩内存,避免碎片但耗时更长。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/13 7:38:47

QMCDecode终极指南:3分钟解锁QQ音乐加密文件,让音乐自由播放

QMCDecode终极指南:3分钟解锁QQ音乐加密文件,让音乐自由播放 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录…

作者头像 李华
网站建设 2026/5/13 7:34:07

本地代码解释器:基于LLM与Docker沙箱的AI编程助手实现

1. 项目概述:一个本地化的代码解释器最近在GitHub上看到一个挺有意思的项目,叫Allen091080/local-code-interpreter。光看名字,很多开发者可能就会心一笑,这不就是想在本地复现类似ChatGPT Code Interpreter那种“对话式代码执行”…

作者头像 李华
网站建设 2026/5/13 7:34:05

从工程师漫画标题竞赛看技术幽默与行业洞察

1. 一场载入史册的漫画标题竞赛在技术圈子里,工程师们除了埋头于电路板、代码和仿真数据,偶尔也需要一点轻松的调剂。2011年6月,在《EE Times》这个全球电子工程师的聚集地,就发生了一件趣事:一场漫画标题征集竞赛&…

作者头像 李华
网站建设 2026/5/13 7:34:06

ghpm:让AI编码助手无缝管理GitHub项目的自动化技能包

1. 项目概述:一个为AI编码助手打造的GitHub项目管理技能包 如果你和我一样,日常开发中已经离不开像Claude Code这样的AI编码助手,同时又需要频繁地在GitHub Projects v2上管理项目任务,那你肯定遇到过这样的割裂感:一…

作者头像 李华
网站建设 2026/5/13 7:31:04

从荒诞专利看产品设计:技术可行性与社会可行性的边界思考

1. 一个“醉汉专用”专利的深度拆解:从荒诞发明看产品设计的边界那天在翻看一些陈年的技术专利档案,偶然撞见了美国专利号6,681,419,标题直白得让人忍俊不禁:“用于站立使用者将前额倚靠在浴室墙壁上的前额支撑装置”。通俗点说&a…

作者头像 李华
网站建设 2026/5/13 7:28:05

从FinFET到纳米片:晶体管架构革命与先进制程未来

1. 从FinFET到纳米片:一场不得不来的晶体管架构革命如果你最近关注过三星、英特尔、台积电和IBM这些半导体巨头的技术路线图,会发现一个共同的趋势:在3纳米及更先进的工艺节点上,大家都不约而同地转向了一种名为“纳米片”的晶体管…

作者头像 李华