AOT 与 JIT
JIT | AOT |
---|---|
Just-in-Time, 实时编译 | Ahead-of-Time,预编译或提前编译 |
Java跨平台的基础 | 无法跨平台 |
AOT的优点
启动和运行的速度快(传统SpringBoot空项目启动时间大概是2秒,AOT的启动时间大概是100毫秒)
打包体积小
AOT的缺点
编译后的程序不支持跨平台
不支持动态功能,如 AOP(面向切面编程,Aspect Oriented Programming)
JIT在高并发中的生产问题现象
现象: 热点应用重启后,出现业务超时,几分钟后恢复正常
解决方法:
预热: 初始让程序自动运行热点代码几百次
流量控制: 启动时小流量,运行几分钟后逐步放到正常流量
GraalVM代替JDK实现AOT
GraralVM 同样出自于 Oracle。它是一个跨语言的通用虚拟机,不仅支持了 Java、Scala、Groovy、Kotlin等基于 JVM 的语言,以及 C、C++等基于 LLVM 的语言,还支持其他像 JavaScipt、Ruby、Rust、Python 和 R 语言等。