高并发系统为什么建议用 G1¶
一、G1 是什么¶
Garbage First,JDK 9+ 默认垃圾收集器。
二、特点¶
1. 分区(Region)¶
堆分成多个大小相等的 Region:Eden、Survivor、Old、Humongous。
不是物理分代,是逻辑分代。
2. 可预测停顿¶
G1 优先回收垃圾最多的 Region(Garbage First),满足停顿时间。
3. 并行 + 并发¶
- 多线程标记。
- 和用户线程并发整理。
三、对比 CMS¶
| CMS | G1 | |
|---|---|---|
| 内存 | 连续分代 | 分区 |
| 碎片 | 有 | 无(复制算法) |
| 停顿 | 不可控 | 可预测 |
| Full GC | 并发失败就单线程 | 很少 |
| 大堆 | 一般 | 适合 4G+ |
四、为什么高并发用 G1¶
- 大堆下停顿可控。
- 没有碎片。
- 不需要复杂调优。
- JDK 官方推荐。
五、参数¶
六、什么时候不用 G1¶
- 小堆(< 200MB):Parallel Scavenge 更简单。
- 超低延迟(< 10ms):ZGC/Shenandoah。
现在
JDK 9+ 默认 G1。大堆用 G1,超大堆用 ZGC。