AOT 编译(Ahead-of-Time)
理解 AOT 编译,是理解 JVM 启动优化的关键。
为什么需要 AOT
JIT 编译的问题:
AOT 编译解决这些问题:
AOT vs JIT
jaotc 工具
基本用法
常用参数
AOT 编译流程
使用 AOT 编译
步骤一:编写代码
步骤二:编译源代码
步骤三:AOT 编译
步骤四:运行
AOT 编译的限制
1. 优化受限
AOT 编译无法利用运行时信息:
2. 类加载问题
动态类加载可能导致问题:
3. 反射和动态代理
GraalVM AOT
GraalVM Native Image 是更强大的 AOT 解决方案:
GraalVM AOT 的优势
AOT 的应用场景
1. 容器化部署
2. Serverless 函数
3. 短生命周期进程
AOT 编译的注意事项
1. 部分 AOT
可以只 AOT 编译热点方法:
2. AOT 与 JIT 共存
AOT 编译的代码和 JIT 编译的代码可以共存:
3. 性能调优
AOT 编译后可以通过 JIT 继续优化:
未来发展
Project Leyden
Project Leyden 是 OpenJDK 的 AOT 编译项目:
- 目标:减少 Java 应用的启动时间和峰值内存占用
- 方法:引入静态镜像概念
- 状态:开发中
云原生 Java
AOT 编译是云原生 Java 的重要组成部分: