JVM 专题 02|GC 收集器怎么选?CMS/G1/ZGC
垃圾回收器决定了停顿时间。面试问"用哪个",得看业务要吞吐还是低延迟。
一、评判维度
吞吐:单位时间干多少业务。
停顿(STW):回收时业务卡多久。低延迟场景(电商、交易)最在意这个。
二、CMS(老牌,已废弃)
并发标记清除,停顿短但碎片化严重、易 Concurrent Mode Failure 退化成全停顿。JDK9 起废弃。
三、G1(默认主流)
把堆切成很多 Region,优先回收垃圾最多的区(Garbage First)。可设停顿目标(MaxGCPauseMillis),平衡吞吐与停顿。JDK9+ 默认。
四、ZGC(超低延迟)
染色指针 + 读屏障,停顿控制在 10ms 以内,且不顾堆大小。JDK15+ 生产可用,适合超大堆、极低延迟。
五、怎么选
一般服务:G1(默认,省心)。
超大堆 + 极致低延迟:ZGC。
别碰 CMS(已废弃)。
六、面试速记
吞吐 vs 停顿,看业务取舍。
CMS:低停顿但碎片,已废弃。
G1:Region + 优先回收垃圾多,默认。
ZGC:停顿 <10ms,超大堆友好。
现在默认选 G1,极致延迟上 ZGC。
七、一句话带走
GC 收集器:G1 是默认省心款,ZGC 是超低延迟款。被问怎么选,先问对方要吞吐还是要停顿。
JVM面试
更多 Java 面试速通,关注公众号持续更新。
原文JVM 专题 02|GC 收集器怎么选?CMS/G1/ZGC 别瞎配