Shenandoah GC
候选人小王在面试字节 P6 时,面试官问道:
"Shenandoah GC 是什么?它和 ZGC 有什么区别?"
小王说:"Shenandoah 是低停顿 GC..."面试官追问:"Shenandoah 的 Brooks Pointer 是什么?"
小王答不上来...
一、核心问题:Shenandoah GC 🟡
1.1 标准回答
P5 级别:与 ZGC 的对比
Shenandoah vs ZGC:
P6 级别:Brooks Pointer
Brooks Pointer(Brooks 指针):
Shenandoah 在每个对象头中添加一个转发指针:
转发指针指向对象的新地址,实现并发压缩:
Brooks Pointer 的代价:
- 每个对象额外增加 8 字节开销
- 双重屏障(读+写)增加屏障开销
【面试官心理】 这道题我能问到 P7 级别,是因为 Shenandoah 和 ZGC 代表了两种不同的低停顿 GC 设计路线。能说清 Brooks Pointer 和 Colored Pointers 差异的候选人说明他理解了 GC 技术的多样性。
二、生产使用 🟢
2.1 Shenandoah 配置
💡
面试加分点:能说出"JDK 21 中,Shenandoah 成为正式特性(GA),不再需要 experimental 标志",说明他关注了 JDK 21 的新特性。
⚠️
面试陷阱:被问到"Shenandoah 的读屏障比 ZGC 的读屏障开销更大吗",很多人会说"是的"。准确答案是:是,因为 Shenandoah 需要同时处理读屏障(检查 Brooks Pointer)和写屏障(更新 Brooks Pointer),而 ZGC 只需要读屏障验证颜色。但两者都是亚毫秒级别的停顿。