# 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 之间无依赖