G1和ZGC垃圾收集器的主要区别是什么?

更新于
2026-09-12 04:19:00
12阅读来源:SEO基础
  • 内容介绍
  • 文章标签
  • 相关问答

为什么你需要关注 GC 停顿时间?

响应时间是最关键的指标——停顿时间超过 1 秒往往代表着业务不可接受的卡顿。不过,此时选择一款能够提供可预测且极短停顿的垃圾收集器成为迫在眉睫的需求。

G1 与 ZGC 的基本原理

G1

  • 面向服务器的大内存、多核机器设计。
  • 将堆划分为多个大小相等的 RegionRegion 大小 = 堆大小 ÷ 2048,可通过 -XX:G1HeapRegionSize 手动指定。
  • Region 可以在运行时动态转换:新生代 → 老年代,甚至回收后 成为新生代。
  • 大对象会被放入专门的 Humongous 区而不是直接进入老年代。
  • 通过“并发标记 + 并发整理”实现高吞吐量,同时提供可配置的停顿目标。

ZGC

  • 定位为“低延迟”垃圾收集器,目标停顿时间不超过 10 ms。
  • 支持 TB 级别的大堆内存,单代。
  • 关键技术包括颜色指针读屏障实现几乎全程并发的标记‑整理算法。
  • 采用基于 Region 的内存布局。但不进行代际区分,使得迁移成本更低。

两者之间的关键区别

并发重分配

G1:在每次回收前会对所有 Region 计算“回收价值/成本”。依据使用者设定的停顿目标,只挑选能够在限定时间内完成的 Region。例如当期望停顿 ≤200 ms。而老年代有 1000 个满载 Region 时G1 可能只回收价值最高的 800 个,以严格控制停顿。

阅读全文
标签:垃圾

为什么你需要关注 GC 停顿时间?

响应时间是最关键的指标——停顿时间超过 1 秒往往代表着业务不可接受的卡顿。不过,此时选择一款能够提供可预测且极短停顿的垃圾收集器成为迫在眉睫的需求。

G1 与 ZGC 的基本原理

G1

  • 面向服务器的大内存、多核机器设计。
  • 将堆划分为多个大小相等的 RegionRegion 大小 = 堆大小 ÷ 2048,可通过 -XX:G1HeapRegionSize 手动指定。
  • Region 可以在运行时动态转换:新生代 → 老年代,甚至回收后 成为新生代。
  • 大对象会被放入专门的 Humongous 区而不是直接进入老年代。
  • 通过“并发标记 + 并发整理”实现高吞吐量,同时提供可配置的停顿目标。

ZGC

  • 定位为“低延迟”垃圾收集器,目标停顿时间不超过 10 ms。
  • 支持 TB 级别的大堆内存,单代。
  • 关键技术包括颜色指针读屏障实现几乎全程并发的标记‑整理算法。
  • 采用基于 Region 的内存布局。但不进行代际区分,使得迁移成本更低。

两者之间的关键区别

并发重分配

G1:在每次回收前会对所有 Region 计算“回收价值/成本”。依据使用者设定的停顿目标,只挑选能够在限定时间内完成的 Region。例如当期望停顿 ≤200 ms。而老年代有 1000 个满载 Region 时G1 可能只回收价值最高的 800 个,以严格控制停顿。

阅读全文
标签:垃圾