【JVM调优实战】13-经典收集器下-G1

发布时间:2026/7/18 23:57:20
【JVM调优实战】13-经典收集器下-G1 经典收集器(下):G1 深度剖析本文是《JVM调优实战》专栏第 13 讲。引言上一讲我们分析了CMS——那个以"低停顿"为目标但最终被算法缺陷拖垮的悲情英雄。G1(Garbage First)正是CMS的继任者,从JDK 7的实验性特性,到JDK 8的稳定版本,再到JDK 9的默认收集器——G1完成了一条完美的进化曲线。G1最吸引人的地方在于它同时解决了CMS的两大痛点:不可预测的停顿时间和内存碎片。它不承诺零停顿,但它承诺停顿时间是可预测、可控制的。对于大多数服务端应用来说,这个承诺比"理论上最短"更有价值。本讲将深入G1的内部机制——从Region化堆布局到混合GC,从SATB到Remembered Set,让你真正理解"Garbage First"这个名字背后的设计哲学。Region:打破物理分代的革命传统分代的局限性在G1之前,新生代和老年代在物理内存上是连续分区的。比如:堆的前500MB是新生代,后面1.5GB是老年代。这种布局简单直观,但有一个致命问题:停顿时间受新生代大小制约。新生代越大,单次Minor GC收集的Eden+Survivor就越多,STW时间就越长。CMS试图通过并发来绕过这个问题,但碎片化始终无解