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

相关推荐
阳火锅22 分钟前
😭测试小姐姐终于不骂我了!这个提BUG神器太香了...
前端·javascript·面试
神奇小汤圆37 分钟前
一文读懂 OpenAI Codex 源码的原理、架构与未来
后端
道友可好1 小时前
AI 是最好的混乱放大器:代码熵管理实战
前端·人工智能·后端
掘金者阿豪2 小时前
写了很多内容后,我还是决定给自己搭一个Typecho博客
后端
Younglina2 小时前
打了3年羽毛球球才发现:我对自己的装备和胜率一无所知
前端·后端
林希_Rachel_傻希希2 小时前
js里面的proxy理解。以及vue3响应式数据设计底层
前端·javascript·面试
Go_error3 小时前
Datatypes:Go 轻松支持数据库JSON类型
后端·go
长大19883 小时前
新手必踩 Redis 10 个低级坑:过期时间、KEYS 命令、持久化误区
后端
Csvn3 小时前
Python 两大经典坑点 —— 可变默认参数 & 闭包延迟绑定
后端·python