GC 调优实战:从日志到参数
📺 配套视频
📝 知识点总结
常用 GC 收集器对比
| 收集器 | 算法 | 适用场景 | 特点 |
|---|---|---|---|
| Serial | 复制/标记整理 | 客户端应用 | 单线程,STW |
| Parallel | 复制/标记整理 | 吞吐量优先 | 多线程,JDK8 默认 |
| CMS | 标记清除 | 低延迟 | 并发标记,已废弃 |
| G1 | 分区收集 | 大堆低延迟 | JDK9+ 默认 |
| ZGC | 染色指针 | 超低延迟 | STW < 1ms |
GC 日志关键指标
# 开启 GC 日志(JDK11+)
-Xlog:gc*:file=gc.log:time,uptime,level,tags:filecount=5,filesize=100m
关注三个核心指标:
- GC 频率:Young GC > 10次/秒 说明新生代太小
- GC 耗时:单次 Full GC > 1秒 需要优化
- 堆使用率:Old 区持续增长不回落 → 内存泄漏
常用调优参数
# G1 收集器推荐配置
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200 # 目标停顿时间
-XX:G1HeapRegionSize=8m # Region 大小
-XX:InitiatingHeapOccupancyPercent=45 # 触发并发标记的堆占用率
-Xms4g -Xmx4g # 堆大小固定,避免动态扩缩
🔗 延伸阅读
- JVM 内存模型与 OOM 排查 — 面试高频考点深度解析