Skip to Content
面试题库Jvm[面试题] ZGC 有什么特点?和 CMS、G1 有什么区别?

[面试题] ZGC 有什么特点?和 CMS、G1 有什么区别?

📖 版块 A:知识讲解版 (温故知新)

  • ZGC 的核心特点

    1. 目标是极低停顿时间。
    2. 停顿时间通常不会随着堆大小线性恶化。
    3. 大量工作并发执行,包括并发标记、并发转移、并发重定位等。
  • 和 CMS 的区别

    1. CMS 主打低停顿,但存在内存碎片问题。
    2. ZGC 低停顿能力更强,且支持并发整理,碎片控制更好。
  • 和 G1 的区别

    1. G1 在通用场景下更均衡,支持停顿时间预测。
    2. ZGC 更偏极致低延迟场景。
    3. G1 仍然会有相对更明显的停顿窗口,ZGC 的停顿更短。
  • 适用场景

    1. 超大堆。
    2. 延迟极敏感系统。
    3. 对吞吐量不是唯一目标,但对响应抖动非常敏感的系统。

🎤 版块 B:面试实战版 (高手逐字稿)

Q:ZGC 有什么特点?和 CMS、G1 有什么区别?

💬 高手逐字稿

如果用一句话概括 ZGC,我会说它是一个把低停顿目标推到极致的现代垃圾回收器

它最核心的特点不是“吞吐最高”,而是:停顿时间非常短,而且这个停顿时间不会随着堆越来越大就明显拉长。 这对超大堆、低延迟系统非常有价值。

和 CMS 比,ZGC 最大的优势在于它不只是并发标记做得更激进,它连对象整理和重定位这类 traditionally 很重的事情,也尽量并发化了。所以 ZGC 在控制停顿上,比 CMS 更先进,而且不会像 CMS 那样长期被碎片问题困住。

和 G1 比,差异主要在定位上。G1 更像一个综合能力很强的通用型选手,适合大部分业务系统,既考虑吞吐,也考虑停顿,还支持停顿目标预测;而 ZGC 更像是一个为“超低延迟”定制的专家型选手。

所以如果业务场景是通用 Java 服务,大多数时候默认 G1 就够用了;但如果你面对的是大堆、延迟特别敏感、又不能接受明显停顿抖动的场景,ZGC 的价值就会非常高。

总结一下:

  • CMS:早期低停顿代表,但碎片问题明显。
  • G1:通用均衡,默认首选。
  • ZGC:极致低停顿,适合更高要求场景。
最后更新于:
⏱️

登录后开始阅读

当前 MVP 版本只开放邮箱密码登录注册。完成登录后即可进入面试题内容。

还没有账号?先去注册