本文主要是介绍JIT编译对比AOT编译(附图片),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1)JIT编译
以最新的java JIT为例, JIT编译器默认情况下处于启用状态,并在调用Java方法时被激活。
JIT编译器将需要执行的方法(或代码片段)的字节码,做一个count计数,如果被调用的count计数超过了一个阈值,则解释器会把这个方法(或代码片段)的字节码编译为本地机器代码,顺手缓存并添加索引,完后直接交给cpu运行。编译并索引了该方法(或代码片段)后,JVM下次执行它的时候会直接找到并调用该方法已编译的本地机器代码,而不是对其进行逐行解释为本地机器码再一一交给cpu执行了。
注意到JIT中涉及到的统计,编译和缓存都是在程序运行时进行的,所以该编译被称作为just in time编译。
那么能不能把这些都放在程序运行之前,来进一步提升执行效率呢? 答案是肯定的。
2)AOT编译
java9就已经开始支持AOT编译了,你只需要把一个字节码文件把交给编译器,它就可以在执行之前编译成so文件,
在真正执行程序的时候,只需要把这个编译好的so文件配置成AOT库,就可以了。如下图:
随之而来的缺点也就出现了,那就是AOT之后的程序不再支持跨平台了,所以使用时还需要进行性能和兼容性的权衡才好。
这篇关于JIT编译对比AOT编译(附图片)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!