【大白话说Java面试题 第44题】【JVM篇】第4题:什么时候会触发 Young GC?什么时候会触发 Full GC?

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

第4题:什么时候会触发 Young GC?什么时候会触发 Full GC

📚 回答:

  • 一句话概括
    • Young GC:当新生代(Eden 区)内存不足时触发。
    • Full GC:当 JVM 整体内存不足(包括老年代或元空间)时触发。

1. Young GC 的触发条件
  • 常见场景

    • 新对象不断被创建,占满 Eden 区后触发 Young GC。
    • 如果 Survivor 区无法容纳存活对象,则部分对象会被晋升到老年代。
  • 底层原理

    • Young GC 使用的是复制算法,将 Eden 区和 Survivor 区的存活对象复制到另一个 Survivor 区。如果 Survivor 区空间不足,则直接晋升到老年代。

2. Full GC 的触发条件
  • 常见场景

    1. 老年代空间不足:当老年代无法容纳从年轻代晋升的对象时,触发 Full GC。
    2. 元空间不足:当元空间(存储类元信息)空间不足时,触发 Full GC。
    3. 手动调用 System.gc():虽然不一定会立即触发 Full GC,但会建议 JVM 进行垃圾回收。
    4. 显式分配担保失败:当年轻代的对象无法通过分配担保机制转移到老年代时,触发 Full GC。
  • 底层原理

    • Full GC 使用的是标记-清除标记-整理算法,扫描整个堆区并回收垃圾对象。

3. 注意事项
  • 优化建议

    • 减少 Young GC:适当增大 Eden 区的大小,避免频繁触发 Young GC。
    • 减少 Full GC:合理设置老年代和元空间的大小,避免内存不足。
  • 监控工具

    • 使用 JVM 自带的工具(如 jstatjvisualvm)监控 GC 行为,分析 GC 日志,找出瓶颈并优化。

    💡 面试官视角

  • 面试官可能会问"如何监控和分析 GC 行为?"答:可以使用 jstat 查看 GC 统计信息,或者通过 -XX:+PrintGCDetails 输出 GC 日志进行分析。

  • 面试官可能会追问"什么是分配担保机制?"答:当年轻代的对象无法放入 Survivor 区时,会尝试将其直接晋升到老年代;如果老年代空间不足,则触发 Full GC。

相关推荐
小兔崽子去哪了16 分钟前
Docker 删除镜像后磁盘空间没有释放?
后端·docker·容器
这是个栗子18 分钟前
前端开发中的常用工具函数(八)
开发语言·前端·javascript
凤凰院凶涛QAQ32 分钟前
《Java版数据结构 & 集合类剖析》栈与队列:“push/pop 是栈的灵魂,offer/poll 是队列的骨架——四组 API,两种人生”
java·开发语言·数据结构
研☆香39 分钟前
为什么变量声明在赋值前也能使用?—— 深入理解 JavaScript 变量提升与作用域
开发语言·前端·javascript
高明珠1 小时前
麒麟 V10 SP1 排查实录:ttyS5 每 10 秒莫名收到一批报文,元凶是 eGTouchD
后端
卷无止境1 小时前
Python FFI 技术深度解析:ctypes、cffi 与 pybind11 的性能差异与实践挑战
后端·python
右耳朵猫AI1 小时前
PHP周刊2026W28 | 安全更新、Laravel 13.18、Twig 3.28
开发语言·php·laravel
second601 小时前
第一部分:快速上手 —— 建立 C++ 基本语法与编程范式
开发语言·c++
郝学胜-神的一滴1 小时前
算法实战:最小k个数——大顶堆的优雅解法
开发语言·数据结构·c++·python·程序人生·算法·排序算法
ServBay1 小时前
AI Gateway 是什么?为什么每个平台都在做
后端·aigc·ai编程