✅ZGC和CMS和G1的区别对比_
典型回答
上面两篇分别介绍过G1和CMS的区别,以及ZGC的特点,那么三个放到一起对比一下,先把G1和CMS的区别搞过过来,再加上ZGC的一些新东西。
| 特性 | CMS | G1 | ZGC |
|---|---|---|---|
| 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 | 染色指针、读屏障 |