Skip to content

题目5:GC 过程与 JVM 调优思路 ​

📊 评分:— | 📅 完成时间:待完成


📝 题目 ​

请你讲一下 JVM 中常见的 GC 过程。Young GC、Full GC 分别在什么场景下触发?生产中如果线上频繁 Full GC,你一般怎么排查和调优?


💬 我的回答 ​


📖 参考答案 ​

一、常见 GC 过程 ​

  • Young GC / Minor GC:主要回收新生代,频率高、停顿短
  • Mixed GC:G1 中会同时回收部分老年代
  • Full GC:回收整个堆和元空间,停顿通常较长

二、触发场景 ​

1. Young GC ​

  • Eden 区满了
  • 大量短生命周期对象持续创建

2. Full GC ​

  • 老年代空间不足
  • 晋升失败
  • 元空间不足
  • 手动调用 System.gc()(不推荐)

三、排查思路 ​

  1. 先看监控:GC 次数、停顿时间、堆使用率、对象晋升情况
  2. 再看 GC 日志:到底是 Young GC 频繁,还是 Full GC 频繁
  3. 分析 dump:确认是否有大对象、对象泄漏、缓存未清理
  4. 结合代码:看是否有一次性加载大数据、无界集合、线程池任务堆积

四、常见调优手段 ​

  • 合理设置 -Xms、-Xmx
  • 选择合适的垃圾收集器,比如 G1
  • 优化对象生命周期,减少大对象和长生命周期对象
  • 控制缓存大小,避免无界集合
  • 排查元空间泄漏,比如动态生成类过多

🎯 面试标准话术 ​

"生产中如果频繁 Full GC,我一般会按三个层次排查:先看监控和 GC 日志,确认 Full GC 的触发原因;再通过 dump 分析大对象或对象泄漏;最后再结合业务代码和参数做优化。调优不是只调 JVM 参数,更多时候要回到对象创建模型和业务代码本身。"

努力工作 享受生活