【大白话说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 自带的工具(如 jstat、jvisualvm)监控 GC 行为,分析 GC 日志,找出瓶颈并优化。

    💡 面试官视角:

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

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

相关推荐
时间的拾荒人几秒前
Qt 多线程详解:从 QThread 到实战
开发语言·qt·面试
海绵宝宝转agent1 分钟前
MySql高频面试八股开源笔记总结
mysql·面试·开源
狼爷7 分钟前
从零用 Java 构建 AI Agent 框架:JavaManus 设计与实现深度解析
后端·langchain·aigc
郑州光合科技余经理9 分钟前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
2601_9620715710 分钟前
类变量和全局变量的生命周期有什么区别?
java·开发语言·jvm
code2cat21 分钟前
Java进阶篇之AtomicReference:一次替换引用,读到一份完整状态
java·并发编程·不可变对象·atomicreference
专业程序开发源25 分钟前
springboot简历管理系统81389-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·php·课程设计
Wang's Blog25 分钟前
Java 项目实战: 外卖平台优化-前后端分离开发模式与工程拆分
java·开发语言
专业程序开发源39 分钟前
springboot社区养老系统44071-计算机课程设计、毕业设计
vue.js·spring boot·后端·python·django·php·课程设计
小呆呆6661 小时前
副业搞起来,小说,漫画,漫剧的成本优化思路
前端·后端·面试