线上 GC 频繁?STW 太长?堆配多大合适?G1 和 ZGC 怎么选?JVM 调优不是背参数,而是理解内存模型 + GC 原理 + 线上验证的系统工程。
一、JVM 内存模型回顾
1.1 堆内存结构
┌───────────────────────────────────────────────────┐
│ JVM Heap │
├─────────────────┬─────────────────────────────────┤
│ Young Generation│ Old Generation │
│ (Young Gen) │ (Old Gen) │
├──────┬──────────┤ │
│ Eden │ S0 | S1 │ │
│ 80% │10%| 10% │ │
├──────┴──────────┴─────────────────────────────────┤
│ Young : Old = 1 : 2(默认) │
│ Eden : S0 : S1 = 8 : 1 : 1 │
└───────────────────────────────────────────────────┘
对象生命周期:
new → Eden → Minor GC → S0/S1 → 经过多次 GC 仍存活 → Old Gen
↓
Major GC / Full GC
2026/7/2大约 9 分钟