题目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()(不推荐)
三、排查思路
- 先看监控:GC 次数、停顿时间、堆使用率、对象晋升情况
- 再看 GC 日志:到底是 Young GC 频繁,还是 Full GC 频繁
- 分析 dump:确认是否有大对象、对象泄漏、缓存未清理
- 结合代码:看是否有一次性加载大数据、无界集合、线程池任务堆积
四、常见调优手段
- 合理设置
-Xms、-Xmx - 选择合适的垃圾收集器,比如 G1
- 优化对象生命周期,减少大对象和长生命周期对象
- 控制缓存大小,避免无界集合
- 排查元空间泄漏,比如动态生成类过多
🎯 面试标准话术
"生产中如果频繁 Full GC,我一般会按三个层次排查:先看监控和 GC 日志,确认 Full GC 的触发原因;再通过 dump 分析大对象或对象泄漏;最后再结合业务代码和参数做优化。调优不是只调 JVM 参数,更多时候要回到对象创建模型和业务代码本身。"