跳转至

高并发系统为什么建议用 G1

一、G1 是什么

Garbage First,JDK 9+ 默认垃圾收集器。

二、特点

1. 分区(Region)

堆分成多个大小相等的 Region:Eden、Survivor、Old、Humongous。

不是物理分代,是逻辑分代。

2. 可预测停顿

-XX:MaxGCPauseMillis=200

G1 优先回收垃圾最多的 Region(Garbage First),满足停顿时间。

3. 并行 + 并发

  • 多线程标记。
  • 和用户线程并发整理。

三、对比 CMS

CMS G1
内存 连续分代 分区
碎片 无(复制算法)
停顿 不可控 可预测
Full GC 并发失败就单线程 很少
大堆 一般 适合 4G+

四、为什么高并发用 G1

  • 大堆下停顿可控。
  • 没有碎片。
  • 不需要复杂调优。
  • JDK 官方推荐。

五、参数

-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:G1HeapRegionSize=16m

六、什么时候不用 G1

  • 小堆(< 200MB):Parallel Scavenge 更简单。
  • 超低延迟(< 10ms):ZGC/Shenandoah。

现在

JDK 9+ 默认 G1。大堆用 G1,超大堆用 ZGC。