GC 与 safepoint 机制与 LLVM IR、优化 Pass 与 eBPF 后端

共 19 题
#

1. 分代 GC 把堆分为 Young/Old 代依据的是哪条弱分代假说?Minor GC 与 Full GC 的触发条件有何不同?

A Full GC 永远不发生
B 分代 GC 与对象存活无关
C Minor GC 是在老年代不足时触发
D 分代 GC 依据弱分代假说;Minor GC 在新生代不足时触发,Full GC 在老年代等资源不足时触发 ✓ 正确答案
#

2. G1 把堆划分为 region 并优先回收垃圾最多的区域,它相对 CMS 在停顿可控性上有何改进?

A G1 按 region 回收并优先垃圾最多者,支持可预测停顿目标,减少 CMS 的碎片化与不可控停顿 ✓ 正确答案
B G1 不做并发回收
C G1 与 CMS 完全相同
D G1 无法整堆压缩
#

3. ZGC 借助染色指针与读屏障实现并发整理,为什么能把停顿控制在亚毫秒级?

A ZGC 靠串行整理实现低停顿
B ZGC 不移动对象
C 染色指针携带状态、读屏障在访问时重定位,使整理并发进行,STW 仅剩极短阶段 ✓ 正确答案
D ZGC 停顿与堆大小成正比且很长
#

4. safepoint 是 JVM 能让线程停下进入 STW 的安全点,为什么 GC、偏向锁撤销、线程 dump 都依赖它?

A 因为它们都需要所有线程在 safepoint 停下进入全局一致状态 ✓ 正确答案
B 因为它们都只需要单个线程放松
C 因为 safepoint 只用于性能
D 因为 safepoint 与暂停无关
#

5. 写屏障在引用赋值时插入额外代码,它在分代 GC 中如何维护卡表以追踪跨代引用?

A 写屏障只影响性能统计
B 卡表是全局锁
C 写屏障在引用赋值时标记脏卡,Minor GC 扫脏卡区域即可找到跨代引用,避免全堆扫描 ✓ 正确答案
D 写屏障与 GC 无关
#

6. 偏向锁撤销为何需要在 safepoint 进行?JDK 15 起默认禁用偏向锁的原因是什么?

A 撤销需在 safepoint 全局停顿以保证安全,JDK 15 起默认禁用是因收益下降而撤销代价高 ✓ 正确答案
B 撤销偏向锁不需要全局协调
C 偏向锁在 JDK 15 后仍默认开启
D 偏向锁撤销与 safepoint 无关
#

7. LLVM IR 采用 SSA 形式与强类型系统,这种设计给跨语言优化和静态分析带来了什么便利?

A SSA 使数据流分析更复杂
B 强类型与优化无关
C SSA 简化 def-use 与优化,强类型增强分析精度,统一 IR 使跨语言优化共享成为可能 ✓ 正确答案
D LLVM IR 只支持一种语言
#

8. LLVM 新 Pass Manager 相比旧版在 Pass 调度、IR 单元(module/function/loop)粒度与结果缓存上有何改进?

A 新版仍用隐式依赖
B 新版提供显式调度、统一 module/function/loop 粒度与 AnalysisManager 结果缓存 ✓ 正确答案
C 新版没有 analysis 缓存
D 新版只支持 module pass
#

9. eBPF 后端如何把 LLVM IR 编译为 BPF 字节码,verifier 的约束(循环、指针)如何反向影响代码生成?

A verifier 不影响代码生成
B verifier 不检查循环
C LLVM 的 BPF 后端生成字节码,同时须满足 verifier 对有界循环与安全指针算术的约束 ✓ 正确答案
D eBPF 不使用 LLVM
#

10. 别名分析(Alias Analysis)如何决定内存相关优化能否进行,noalias 与 restrict 对向量化的意义是什么?

A may-alias 总是允许向量化
B 别名分析不影响向量化
C noalias/restrict 承诺无别名,使编译器可安全重排与向量化访存 ✓ 正确答案
D restrict 会阻止优化
#

11. JIT 与 AOT 在启动延迟、峰值性能与运行时内存占用上如何取舍,分层编译如何在其间折中?

A JIT 不需要运行时编译
B 分层编译只影响启动
C AOT 利用运行期反馈优化
D JIT 启动需运行时编译与预热、峰值性能高,AOT 提前编译启动快,分层编译按热度在冷/热代码间折中 ✓ 正确答案
#

12. LLVM 的 attribute(如 noundef、nonnull、sret)如何承载语义信息并驱动优化与验证?

A attribute 只是注释
B attribute 只影响调试
C attribute 编码函数/参数/返回语义,驱动优化(如 nonnull 消除空指针检查)并可验证 ✓ 正确答案
D attribute 与优化无关
#

13. 为何 eBPF verifier 要求有界循环与可证明的内存访问,这使 LLVM 的循环优化在该后端受到哪些限制?

A verifier 不限制循环
B verifier 与 LLVM 无关
C verifier 要求无限循环
D verifier 要求有界循环与可证明内存访问,促使后端避免过度展开等破坏可证明性的优化 ✓ 正确答案
#

14. counted loop 默认不插 safepoint poll,为什么会导致 GC 长时间无法 STW?UseCountedLoopSafepoints 如何缓解?

A counted loop 总是有 safepoint poll
B 循环内不能插 poll
C safepoint 与 GC 无关
D 无调用点的 counted loop 默认可能无 poll,导致 GC 长时间无法 STW;UseCountedLoopSafepoints 在循环内插 poll 缓解 ✓ 正确答案
#

15. 并发标记阶段用户线程仍在修改引用,写屏障如何配合 SATB 或增量更新保证标记正确?

A 写屏障配合 SATB(记录旧引用)或增量更新(记录新引用)保证并发期间不漏标 ✓ 正确答案
B 并发标记不需要写屏障
C 写屏障只影响读写速度
D 漏标不会影响正确性
#

16. STW 停顿与吞吐量的权衡如何影响 GC 选型?低延迟服务为何倾向 ZGC/Shenandoah?

A 低延迟服务应选吞吐量最高的 Parallel GC
B 所有 GC 停顿相同
C 低延迟服务倾向 ZGC/Shenandoah 等并发低停顿 GC,以可控停顿换取稳定低延迟 ✓ 正确答案
D 停顿与吞吐无关
#

17. 三色标记中漏标由哪两个条件共同导致?写屏障如何破坏其中一个条件?

A 黑对象指向白对象且灰对象失去该引用(两条件同时满足) ✓ 正确答案
B 只由白对象指向黑对象导致
C 与引用修改无关
D 只由灰对象指向黑对象导致
#

18. 内联(inlining)、GVN、循环不变量外提(LICM)等 Pass 各自消除什么冗余,触发条件与代价模型是什么?

A 三者都只消除分支
B 内联消除调用开销、GVN 消除重复计算、LICM 消除循环内不变量重复计算,均依赖代价模型 ✓ 正确答案
C 三者功能完全相同
D 三者都不需要代价模型
#

19. Pass 之间的依赖与失效(analysis invalidation)如何被 Pass Manager 管理,为何顺序会影响优化结果?

A Pass Manager 通过依赖声明与 PreservedAnalyses 管理失效,且顺序影响优化结果(先变换改变后续可用的信息) ✓ 正确答案
B Pass 顺序不影响结果
C analysis 从不失效
D Pass 之间无依赖