【大白话说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。

相关推荐
vb2008115 分钟前
FastAPI APIRouter
开发语言·python
Benszen7 分钟前
KVM虚拟化解决方案
开发语言·perl
会编程的土豆8 分钟前
Go 语言反射(Reflection)详解
开发语言·后端·golang
東雪木10 分钟前
多线程与并发编程 专属复习笔记
java·开发语言·笔记·java面试
Cosolar11 分钟前
从零写一个 Attention Is All You Need
人工智能·面试·架构
adrninistrat0r15 分钟前
Java调用链MCP分析工具
java·python·ai编程
喵个咪28 分钟前
GoWind Toolkit Go后端代码生成 完整全流程实战
后端·go·orm
杨充43 分钟前
1.3 浮点型数据设计灵魂
开发语言·python·算法
噜噜噜阿鲁~1 小时前
python学习笔记 | 11.3、面向对象高级编程-多重继承
java·开发语言
basketball6161 小时前
Go 语言从入门到进阶:4. 数组和MAP使用方法总结
开发语言·后端·golang