Hasty Briefsbeta

双语

JEP 544: Ahead-of-Time Code Compilation

20 days ago
  • JEP 544 通过使用提前编译(AOT)在训练运行中生成优化的本地代码并将其存储在 AOT 缓存中以供生产环境即时使用,从而改善 Java 的启动和预热性能。
  • 此功能扩展了现有的 AOT 缓存,在早期 JEP(483 和 515)的预链接类和分析数据基础上,新增了编译后的本地代码。
  • 通过动态反优化和按需使用 JIT 编译重新优化,系统能更快达到峰值性能,并在工作负载变化时持续保持性能。
  • 除启用 AOT 缓存外,无需更改应用程序代码或 HotSpot 配置;AArch64 和 x64 架构以及多种垃圾收集器均受支持。
  • AOT 和 JIT 代码无缝共存;HotSpot 会自动在两者间切换。基准测试显示,启动时间减少 65-80%,预热性能显著提升。
  • AOT 和 JIT 代码的差异源于训练运行中的类初始化顺序和未知的静态 final 字段值,但这些问题会被透明地处理。
  • 训练和生产运行必须具有相同的 CPU 特性和垃圾收集器才能使用 AOT 代码;否则 HotSpot 会回退到 JIT 编译。
  • PrintCompilation 和 AOTMode=required 等选项有助于观察和控制 AOT 代码的使用,诊断选项可禁用 AOT 代码缓存。