JIT
在运行时将源码/中间字节码编译成可执行的二进制码。即边编译边运行。
AOT
提前将代码编译成可执行的二进制码。即先编译后运行。
特性
动态性
- JIT 能够自己生成新的源码,热重载替换原码。根据代码执行的热度优化生成更高效的二进制代码等。
- AOT 无法做到
平台无关
动态性 | 平台 | 内存 | 性能 | |
---|---|---|---|---|
JIT | 能够自己生成新的源码,热重载替换原码。根据代码执行的热度优化生成更高效的二进制代码等,能够实现渐进升级 | 平台无关 | 开销多,编译带来额外花销 | 慢启动,随着优化性能不断提高。但这也导致了性能波动的不稳定性。 |
AOT | 不具备动态性,app升级需重新编译 | 平台相关 | 开销少 | 启动快,性能稳定,但无法得到进一步优化 |
总结
两者的总体性能差别不大,甚至JIT有些时候能超过AOT。但是JIT的性能波动导致了有些应用不适合使用。两者都不能解决所有需求,有时候还需要作为互补。
网友评论