CRaC 与 Java 应用冷启动优化

共 20 题
#

1. CRaC(Coordinated Restore at Checkpoint)的原理,JVM 检查点与恢复的协作流程

A CRaC 基于 CRIU 冻结整个进程状态,恢复时跳过初始化,但需应用协同清理/重建资源 ✓ 正确答案
B CRaC 通过重新执行 main 方法实现冷启动优化
C CRaC 只保存堆,不保存线程与 JIT 状态
D CRaC 与操作系统无关
#

2. CRaC 与 Spring Boot 集成,Resource 接口的 beforeCheckpoint/afterRestore 回调

A 检查点前无需清理资源,恢复后自动重建
B beforeCheckpoint 关闭不可冻结资源,afterRestore 重建连接池等,通过 Resource 接口/@Checkpoint 协调 ✓ 正确答案
C CRaC 只支持非 Spring 应用
D 连接池在恢复后无需重建
#

3. 检查点保存的内容,堆、类加载状态与 JIT 编译产物整体冻结,恢复后为何无需重新类加载与预热

A 检查点冻结堆、类加载状态与 JIT 产物,恢复后无需重新类加载与预热 ✓ 正确答案
B 检查点只保存堆,不保存 JIT 编译产物
C 恢复后仍需重新编译所有热点方法
D 检查点无法保存预热状态
#

4. CRaC 与 GraalVM Native Image 的冷启动优化路径对比

A 两者优化路径完全相同
B Native Image 保留全部反射特性
C CRaC 保留 JVM 冻结状态、依赖 CRIU,Native Image 静态编译、动态特性受限 ✓ 正确答案
D CRaC 不依赖操作系统
#

5. CRaC 对网络连接(连接池/线程池/定时器)恢复的处理,为何需要重建资源

A 连接池在恢复后自动保持可用,无需重建
B 文件描述符在恢复后自动有效
C 定时器无需处理
D 连接/FD/定时器等外部资源无法随进程冻结,需 beforeCheckpoint 关闭、afterRestore 重建 ✓ 正确答案
#

6. CRaC 的检查点触发方式,JFR 事件驱动与外部工具(CRIU)协作

A 检查点只能手动触发
B CRIU 与 JVM 无关
C 可通过应用代码、JFR 事件或外部工具触发,底层由 CRIU 执行冻结与恢复 ✓ 正确答案
D JFR 事件无法触发检查点
#

7. CRIU(Checkpoint/Restore In Userspace)在容器环境的使用与权限要求

A CRIU 无需任何权限即可运行
B CRIU 需 ptrace 与特定 CAP_* 能力,受限容器需调整运行时配置 ✓ 正确答案
C CRIU 与内核无关
D CRIU 在容器中一定可用
#

8. CRaC 与 Redis/数据库连接池,检查点前关闭、恢复后重连的边界

A 连接池的连接在恢复后自动有效
B 检查点窗口内可正常处理业务请求
C 连接池无需纳入 CRaC 回调
D 需在检查点前关闭连接池、恢复后重连,并主动预热避免恢复后连接失效 ✓ 正确答案
#

9. CRaC 与虚拟线程的兼容性现状

A 虚拟线程与 CRaC 完全兼容,无需验证
B 虚拟线程的挂起/调度状态冻结是挑战,兼容性在演进,需在目标 JDK 上验证 ✓ 正确答案
C 虚拟线程在检查点后必然失效
D CRaC 不支持任何虚拟线程
#

10. CRaC 在生产中的限制,PID、文件描述符、随机数种子与加密密钥恢复

A 恢复后 PID 与随机种子保持不变,无需处理
B 加密密钥可安全持久化到检查点镜像
C PID 变化、FD 失效、随机种子可预测与密钥落盘都需在恢复后处理 ✓ 正确答案
D 文件描述符恢复后自动有效
#

11. 检查点镜像的安全与合规,敏感内存数据持久化到磁盘的风险

A 检查点镜像不含敏感数据
B 镜像可能持久化密钥/token 等敏感数据,需检查点前清理、镜像加密与访问控制 ✓ 正确答案
C 密钥可安全保存在镜像中
D 镜像文件无需权限控制
#

12. 冷启动优化手段全景,CDS/AppCDS、AOT 缓存、分层 jar 与 CRaC 的收益叠加

A 各手段互斥,只能选其一
B CDS/AppCDS、AOT、分层 jar 与 CRaC 可组合叠加,按启动需求分层采用 ✓ 正确答案
C CRaC 与 CDS 完全冲突
D 分层 jar 只影响磁盘,不影响启动
#

13. 无状态服务与有状态服务的 CRaC 适配差异

A 两者适配完全一致
B 有状态服务更适合 CRaC
C 无状态服务状态在外部、适配简单,有状态服务需保证进程内状态一致性并处理检查点窗口 ✓ 正确答案
D 无状态服务无法用 CRaC
#

14. CRaC 与 Kubernetes 的整合,初始化容器做检查点、主容器快速恢复

A 主容器负责做检查点并恢复
B init 容器做检查点、主容器从共享存储恢复,实现毫秒级快速启动 ✓ 正确答案
C 检查点镜像无需共享存储
D 主容器必须重新预热
#

15. 检查点的触发与恢复参数,-XX:CRaCCheckpointTo 指定目录、恢复时重新指定堆大小等 JVM 参数的差异

A -XX:CRaCCheckpointTo 指定检查点目录,恢复时可重新指定堆大小等参数 ✓ 正确答案
B 恢复时只能使用与检查点完全相同的参数
C 恢复参数与检查点参数无关
D 堆大小在恢复时无法调整
#

16. 检查点窗口的流量处理,与 Kubernetes preStop 钩子、优雅下线配合,如何避免检查点期间请求丢失

A 检查点期间可继续处理请求
B 就绪探针与检查点无关
C 通过 preStop 摘流量、就绪探针失败与优雅下线,让检查点窗口无流量,避免请求丢失 ✓ 正确答案
D 检查点期间请求会排队等待
#

17. CRaC 的故障恢复语义,检查点后代码变更失效与版本绑定

A 检查点镜像与代码版本无关,可任意复用
B 旧检查点镜像可安全用于新代码
C 检查点绑定代码版本,代码变更后旧镜像失效,需重新生成并校验版本 ✓ 正确答案
D 恢复时无需校验镜像版本
#

18. CRaC 与 Serverless/FaaS 场景的冷启动收益

A CRaC 对冷启动无帮助
B CRaC 通过恢复预热态实例显著降低 Serverless 冷启动延迟,需环境支持与版本匹配 ✓ 正确答案
C Serverless 环境天然支持 CRaC
D 冷启动只影响成本,不影响延迟
#

19. CRaC 的生态系统支持,Spring Boot、Quarkus、Helidon 的 CRaC 支持现状

A 只有 Quarkus 支持 CRaC
B 所有框架对 CRaC 支持完全一致
C Spring Boot 不支持 CRaC
D Spring Boot、Quarkus、Helidon 均提供 CRaC 集成,但资源处理与成熟度不同 ✓ 正确答案
#

20. 检查点前的预热策略,主动执行代表性请求把热点代码编译进镜像,恢复后首次请求延迟的优化

A 无需预热,恢复后首次请求自动无延迟
B 预热请求会污染所有业务数据
C 主动执行代表性请求触发 JIT 编译,让热点代码随检查点冻结,优化恢复后首次请求延迟 ✓ 正确答案
D JIT 在检查点前自动编译所有方法