典型回答

✅JDK 11中新出的ZGC有什么特点?

✅G1和CMS有什么区别?

上面两篇分别介绍过G1和CMS的区别,以及ZGC的特点,那么三个放到一起对比一下,先把G1和CMS的区别搞过过来,再加上ZGC的一些新东西。

特性CMSG1ZGC
JDK版本1.8及以前,(JDK14中被移除)1.7+ (1.9+的默认GC)JDK 15+
设计目标低延迟,减少GC停顿时间可预测的停顿时间,兼顾吞吐量和延迟极低延迟(亚毫秒级停顿),支持超大堆
STW部分STW(参考三色标记法)部分STW(参考三色标记法)几乎所有阶段都是并发执行的
分代情况物理连续的年轻代+老年代划分为等大小Region,逻辑分代划分为等大小Region (JDK21前无分代,JDK21后支持分代)
回收位置老年代整堆整堆
GC算法标记-清除算法区域化的标记-整理算法(按照Region)并发标记-整理 + 可扩展的区域分配
碎片产生存在内存碎片可防止内存碎片产生可防止内存碎片产生
可预测性无法预测G1的STW时长可预测
堆内存基本要求一般要求不高4G以上超大堆(TB级别)
自适应调优不支持支持
核心技术三色标记法三色标记法,Region染色指针、读屏障