新一代收集器:ZGC 与 Shenandoah 的低延迟革命
本文是《JVM调优实战》专栏第 14 讲。
引言
CMS把停顿做到了百毫秒级,G1把停顿控制在可预测的几十到一百毫秒。这对大多数Web应用来说已经足够好了。但有一些场景——金融交易系统、实时游戏服务器、大规模数据分析平台——对延迟的要求苛刻到了毫秒必争的程度。几百毫秒的GC停顿,在这些场景中就意味着订单延迟、游戏卡顿、分析断流。
ZGC和Shenandoah正是在这样的需求下诞生的。它们的目标不是"缩短"停顿,而是让停顿时间与堆大小解耦——无论堆是8GB还是8TB,GC停顿都维持在亚毫秒到几毫秒级别。这是GC设计的一个根本性突破。
本讲将剖析ZGC和Shenandoah的核心技术原理,对比它们的实现差异,并帮你判断:你的应用真的需要"亚毫秒级"GC吗?
低延迟收集器的技术挑战
传统的垃圾收集器都面临一个结构性矛盾:堆越大,回收越久。这个矛盾根植于"标记-整理"或"标记-复制"算法中——堆越大,需要扫描和移动的对象就越多。
G1通过"只回收一部分Region"来缓解这个问题,但它没有解决根本矛盾:单次Mixed GC仍然需要扫描整个新生代和部分老年代,停顿时间虽然可控,但始终和堆大小正相关。
要突破这个天花板,必须从两个方向下手: