JVM 垃圾回收器结构化面试答题

📌 一、你们项目中使用了什么垃圾回收器?为什么?

答题结构:

  1. 选择哪种垃圾回收器(GC)

    • 我们线上项目主要使用的是 G1 GC

    • 历史系统曾使用过 CMS GC

  2. 为什么选择这个回收器?(场景驱动)

    场景回收器原因
    核心交易服务、高并发接口G1 GC停顿时间低、可预测、吞吐稳定
    报表导出、批处理系统CMS GC并发回收、老年代回收性能好
    容器化部署、大堆服务ZGC/Shenandoah超低延迟,适合8G+内存服务
  3. 项目实战举例

    我们在支付模块用 G1 替代 CMS,GC 停顿由 400ms 降至 60ms,提升了 TPS 峰值和稳定性。


📌 二、CMS GC 的原理是什么?用了什么算法?

答题结构:

  1. 基本介绍

    • CMS(Concurrent Mark Sweep)是一种 老年代回收器

    • 采用 标记-清除算法,追求最小化 STW 停顿时间

  2. 工作流程分为 4 步

    阶段是否 STW描述
    初始标记标记 GC Roots 的直接引用对象
    并发标记多线程并发标记可达对象
    重新标记修复并发标记期间的变化
    并发清除回收不可达对象,不移动对象
  3. 优点与缺点

    • ✅ 优点:响应时间低,适合对延迟敏感场景

    • ❌ 缺点:内存碎片、并发失败会触发 Full GC,造成长时间 STW(ConcurrentModeFailure

  4. 项目实战举例

    我们曾在订单系统中使用 CMS,但出现碎片和并发失败问题,最终切换到 G1 解决。


📌 三、老年代都有哪些回收器?用了什么算法?

回收器所属年代回收算法特点说明
Serial Old老年代标记-整理单线程,适用于客户端或小堆
Parallel Old老年代标记-整理吞吐量优先,多线程 Full GC
CMS老年代标记-清除并发回收、低延迟、可能碎片
G1 GC新+老通用Region + 并发复制分区管理堆,停顿可控
ZGC / Shenandoah通用并发回收 + 增量更新超低延迟,适合大内存高实时场景(Java 11+)


📌 四、G1 GC 与 CMS 的对比?

维度G1 GCCMS GC
回收算法Region + 并发复制标记-清除
停顿控制✅ 停顿可预测(PauseMillis)❌ 不可控
内存整理自动整理碎片无整理,可能出现碎片
并发能力多阶段并发并发标记+清除,其他需 STW
弃用状态默认垃圾回收器(Java 9+)Java 14 起已弃用


📌 五、GC 调优和分析怎么做?

实操建议

  • 开启 GC 日志

    -XX:+PrintGCDetails -Xloggc:/var/log/gc.log

  • 工具分析:

    • jstat / jvisualvm

    • GCViewer / GCeasy

    • Prometheus + Grafana 监控 GC 次数、时间、堆使用率

调优参数示例

# G1 GC 优化
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:InitiatingHeapOccupancyPercent=45

📌 六、项目场景中的典型 GC 优化策略(面试可说服力更强)

场景采取优化措施
多服务部署在容器中,堆大小不一致-XX:+UseContainerSupport 让 JVM 识别 cgroup 限制
CMS 出现 OOM调整 CMSInitiatingOccupancyFraction=70 或切换 G1
高并发业务交易 TPS 突增使用 G1 + 限制新生代比例 + 降低 PauseMillis
数据导出、异步服务使用 Parallel GC 或 CMS 优化吞吐


✅ 面试小结口播建议(带结构):

“我们线上核心服务使用的是 G1 GC,结合业务延迟需求,通过 PauseMillis 进行停顿控制。之前也使用过 CMS,但出现碎片和 FullGC 风险,因此替换。GC 日志我们通过 Grafana 可视化分析,一旦发现 GC 时间异常,就会结合 jstat 和 heap dump 工具排查内存热点,整体稳定性良好。”

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值