主题
面试速答(先看这里)
**一句话结论:**上面两篇分别介绍过G1和CMS的区别,以及ZGC的特点,那么三个放到一起对比一下,先把G1和CMS的区别搞过过来,再加上ZGC的一些新东西。
60秒标准回答:
上面两篇分别介绍过G1和CMS的区别,以及ZGC的特点,那么三个放到一起对比一下,先把G1和CMS的区别搞过过来,再加上ZGC的一些新东西
1.8及以前,(JDK14中被移除)
1.7+ (1.9+的默认GC)
**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点
回答主线:
- **要点1:**1.8及以前,(JDK14中被移除)
- **要点2:**可预测的停顿时间 ,兼顾吞吐量和延迟
- **要点3:**极低延迟(亚毫秒级停顿) ,支持超大堆
- **要点4:**划分为等大小Region ,逻辑分代
- **要点5:**划分为等大小Region (JDK21前 无分代,JDK21后支持分代 )
**记忆锚点:**Region → CMS → ZGC → STW → JDK21 → JDK版本
追问准备:
- 围绕「Region」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「CMS」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「ZGC」:底层原理是什么?使用时有哪些边界和常见坑?
- 如果线上出现异常,你会如何定位、验证并规避?
典型回答
上面两篇分别介绍过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 | 染色指针、读屏障 |