AOT、Native、CRaC生命周期与语言互操作
本实验不启动网络服务,不改MySQL/Redis/Mongo/ES,不改全局JDK。普通JVM/AOT与语言测试用JDK21;Native编译使用独立的GraalVM工具链。
公开完整入口
JAVA_HOME=$(/usr/libexec/java_home -v21) \
U28_GRAALVM_HOME=/path/to/verified-graalvm/Contents/Home \
python3 labs/aot-native/run.pyU28_GRAALVM_HOME必须指向已核验且提供native-image的GraalVM;示例中的/path必须替换为实际目录。本次实际路径是任务缓存~/.cache/software-engineering-study/java-depth-impl/u28/toolchain/graalvm-community-25.4.4.1.1+1.1/Contents/Home。下载来源与整包SHA-256在toolchain.json,官方GitHub release非prerelease,发布2026-09-22、查询2026-10-26;仅代表本次复现工具链,不推出商业支持周期。首次复现需下载相同官方macOS arm64包、比对官方.sha256再解压到独有缓存;其他平台必须选各自资产并重新验证,不能复用本机二进制。
固定Boot4.0.9/Framework7.0.10,普通源target21;Native专用GraalVM Community25 Innovation4/JDK25.0.4.1.1、Native Build Tools0.11.5;Kotlin2.2.21、JSpecify1.0.1、Groovy5.0.8、协程版本由Boot BOM解析并写入运行证据。macOS arm64本机已具备clang链接工具。Native编译限制4线程、Java构建堆3GiB、no-fallback,公开入口该阶段超时600秒,其余命令240秒。这些是有界功能验证,不是性能测试。
真正执行的断言
- 普通JVM:red Profile→red Bean、运行期值changed、受控反射与资源读取;生命周期构造/start/refreshed/runner/stop。
- 缺AOT:普通JAR启用spring.aot.enabled→非零,失败分析明确缺App__ApplicationContextInitializer。
- AOT JVM:构建blue,运行传red仍是blue Bean,普通属性仍changed;生成与业务预热分开。
- Native:真实编译可执行文件,复验blue/changed、反射/资源;同一未注册插件在JVM成功、Native失败,断言ClassNotFound/MissingReflection类失败。
- CRaC边界:普通JVM请求checkpoint=onRefresh失败;exit=onRefresh只见构造观察,不到start/refreshed/runner。实现使用Runtime.halt(0),只对本实验无外部资源的自有JVM使用,不保证finally/关闭钩子。
- 空安全:Java仅注解仍可编译null调用并运行NPE;Kotlin strict正常/nullable安全调用成功,故意Bad.kt的两个非法类型使用编译失败,finally只删除自有Bad.kt,再clean compile恢复。
- 协程:Flow→asFlux、ReactorContext→awaitSingle、超时取消上游doOnCancel=1;是独立JVM互操作探针,不冒充完整Web/安全链。
- Groovy:受信固定Bean DSL在普通JVM登记/实例化字符串Bean,不执行用户输入、不承诺Native动态脚本可用。
证据JSON记录一次完整入口的命令、预期/实际退出、观察、源码/配置/runner哈希、平台/依赖、原始日志目录。每次日志目录独有,不混拼历史失败与成功;失败不生成新的通过证据。生成产物只在各模块target内,可定向重建;Kotlin负例临时复制src/main/kotlin/Bad.kt,已有同名文件即拒绝运行,finally清理。
明确未运行
真实CRaC checkpoint文件/restore未运行:Framework v7.0.10官方当前要求Linux+CRaC JVM,本机macOS不满足;exit探针不替代快照。没有CRaC性能/恢复成功声明、没有生产冷启动/P99/容量数据、没有跨平台Native/Buildpacks/Gradle运行或全依赖兼容声明。Kotlin反射Bean参数发现/kotlin-spring代理、Web协程端点没有逐项实跑;正文列配置需求与订阅语义边界,真实安全归U31。