Native Image 构建与优化

共 18 题
#

1. Native Image 构建时间优化,并行编译、构建缓存、增量构建

A 构建缓存可复用上一轮的可达性分析与编译结果,从而显著减少重复构建时间 ✓ 正确答案
B 构建缓存仅对测试环境有效,对生产镜像无任何作用
C 并行编译只能减少分析阶段时间,对编译阶段毫无影响
D 优化级别越高(如 -O3)构建时间越短,应始终使用最高级别
#

2. GraalVM Community Edition 与 Enterprise Edition 的功能差异

A 两款产品功能完全一致,仅许可证不同
B EE 通常提供更成熟的 PGO 支持与 G1 GC 支持,CE 默认使用 Serial GC ✓ 正确答案
C CE 不支持任何反射配置,只能使用 EE
D EE 运行速度一定比普通 JVM 慢一倍
#

3. GraalVM 的 reachability metadata 配置,reflect-config.json、resource-config.json

A 只包含 reflect-config.json 一种文件,资源无需配置
B 有了静态分析后,所有动态配置都自动生成,无需任何文件
C 配置错误只会导致构建失败,不会影响运行时
D reflect-config.json 用于声明运行期需要的反射信息,resource-config.json 用于声明需打包进镜像的资源 ✓ 正确答案
#

4. Native Image 的堆快照(Heap Snapshotting)与启动时初始化(build-time vs run-time initialization)

A build-time 初始化在运行时执行,导致启动变慢
B run-time 初始化一定比 build-time 初始化更快
C build-time 初始化在构建期固化静态状态,启动更快但要求状态在构建期可确定 ✓ 正确答案
D 堆快照与初始化时机无关,只是压缩镜像
#

5. Native Image 构建失败的常见原因(构建期初始化异常、缺失反射元数据、JNI 调用)与排查路径

A 构建失败一定是 JVM 版本问题,与配置无关
B 只要加了 reflect-config.json 就一定能成功构建
C 常见原因是构建期初始化异常、缺失反射元数据与 JNI 库缺失,需根据报错定位具体类并针对性处理 ✓ 正确答案
D 构建失败无法定位,只能靠猜测
#

6. Native Image 下 Build-Time Class Initialization 与 Runtime Initialization 的权衡?

A Runtime 初始化一定优于 Build-Time 初始化
B 所有类都应使用 Runtime 初始化
C 两种初始化方式对性能无差异
D Build-Time 初始化启动更快但要求在构建期可确定静态状态,Runtime 初始化更安全但增加启动开销 ✓ 正确答案
#

7. Native Image 的 PGO(Profile-Guided Optimization)与性能取舍

A PGO 只需一次构建即可完成所有优化
B PGO 只影响镜像体积,不影响性能
C PGO 通过先构建采样镜像、采集代表性运行数据,再据此重建最终镜像,从而提升 AOT 优化效果 ✓ 正确答案
D PGO 会禁用所有 AOT 优化
#

8. Native Image 的大小优化,去除未使用代码、压缩、UPX

A UPX 压缩后启动永远更快
B 去除不可达代码、剥离符号与使用 UPX 都能减小镜像体积,但需权衡启动开销与可调试性 ✓ 正确答案
C 镜像体积只能通过增加内存来优化
D 静态分析无法去除任何未使用代码
#

9. Native Image 的配置生态,reflect/resource/proxy/serialization 四类配置如何?

A 四类配置中只有 reflect-config.json 存在
B 资源不需要任何配置
C proxy-config.json 用于声明需要动态代理的接口,serialization-config.json 声明序列化所需类 ✓ 正确答案
D 序列化在 Native Image 中无需配置
#

10. Native 镜像在 K8s 中的启动探针与资源限制(CPU/内存与 GC 参数)

A Native 启动快,无需任何探针
B 资源限制只与 CPU 有关,与内存无关
C 应配置 startupProbe 检测启动完成,并合理设置资源限制且为堆外内存预留空间 ✓ 正确答案
D GC 参数在 K8s 中完全无效
#

11. Native Image 在 Kubernetes 中的冷启动优势与资源限制

A 冷启动极快,适合弹性伸缩;但需合理设置内存限制并考虑缺少 JIT 带来的峰值性能差异 ✓ 正确答案
B Native 镜像不需要任何资源限制
C Native 镜像冷启动比 JVM 慢
D Native 在 K8s 中无法使用探针
#

12. Native Image 反射配置 JSON 自动生成(Tracing Agent)的工程价值?

A 它只能手动生成,无法自动
B 它自动采集运行期动态调用并生成 JSON 配置,减少手工维护成本并可与 CI 集成 ✓ 正确答案
C 它只影响镜像体积,不影响正确性
D 它生成的配置一定准确,无需任何验证
#

13. Native Image 的调试,GDB 调试、堆转储、JFR 支持

A Native Image 完全无法调试
B 只有 JFR 一种调试手段
C GDB 只能调试 JVM 代码
D 支持 GDB 调试、堆转储与受限的 JFR,但能力丰富度普遍低于 JVM ✓ 正确答案
#

14. Native Image 的构建流程,静态分析、闭包计算与 AOT 编译到本机可执行文件如何?

A 从入口点做静态分析,计算可达闭包后 AOT 编译并链接为本机可执行文件 ✓ 正确答案
B 运行时仍会动态加载任意类
C 闭包计算与反射配置无关
D 构建时不需要任何分析,直接编译所有字节码
#

15. Native 构建的 CI 集成,多平台交叉编译与缓存加速如何?

A 多平台需在对应平台构建或借助交叉编译,并可通过持久化构建缓存加速 ✓ 正确答案
B 构建缓存会污染代码,不能使用
C Native 构建只能在本机执行,无法进入 CI
D 多平台镜像完全一致,无需区分
#

16. Native 构建的最小化,类路径裁剪、无用类剔除与镜像瘦身如何?

A 最小化只需删除一个 jar 即可
B 精简配置会破坏所有功能
C 镜像瘦身与基础镜像无关
D 通过裁剪类路径、剔除无用类与精简基础镜像来减小体积 ✓ 正确答案
#

17. Native Image 的构建期初始化,class 初始化策略与静态状态的限制如何?

A 静态状态不允许初始化
B 任何静态状态都能在构建期安全固化
C 构建期固化的静态状态不能依赖运行时变化的环境,否则应改用 run-time 初始化 ✓ 正确答案
D 构建期与运行期完全一致,无需考虑
#

18. 如何用 --initialize-at-build-time/--initialize-at-run-time 精细控制类初始化时机

A 两个参数只能作用于整个应用,无法指定单个类
B --initialize-at-build-time 在构建期初始化指定类,--initialize-at-run-time 在运行期初始化,可精细控制 ✓ 正确答案
C run-time 参数在构建期完全无效
D 初始化时机对性能无影响