1. JVM 现代 GC 的工程取舍,G1(默认)、ZGC(< 1ms 暂停)、Shenandoah(低延迟)、Epsilon(no-op)的生产选型如何?
请说明 JVM 现代 GC 的工程取舍,包括 G1(默认)、ZGC(< 1ms 暂停)、Shenandoah(低延迟)、Epsilon(no-op)在生产上的选型?
- 各 GC 的定位与特性
- 延迟与吞吐的权衡
- 生产选型依据
G1 是默认 GC,面向中等规模堆,兼顾吞吐与可预测停顿,适合大多数应用。ZGC 目标是极低停顿(亚毫秒级),支持超大堆(TB 级),通过染色指针与并发整理实现,适合对延迟敏感、堆大的服务。Shenandoah 也是低延迟 GC,通过并发整理与转发指针降低停顿,适合大堆、低延迟场景,与 ZGC 竞争。Epsilon 是 no-op GC,不进行任何回收,只适合内存一次性分配、生命周期极短的测试/短命程序,或配合外部回落。生产选型关键:默认场景用 G1;低延迟 + 大堆用 ZGC 或 Shenandoah;Epsilon 仅限特定测试。需结合堆大小、停顿目标、吞吐要求与 GC 调优成本做压测验证。
GC 选型是"延迟 vs 吞吐 vs 堆规模"的权衡:G1 均衡、ZGC/Shenandoah 低延迟、Epsilon 无回收。选型后必须压测验证,避免"理论最优"在实际中不达标。