java字节码编译执行
JDK1.0时代,将Java语言定位为“解释执行”还是比较准确的(先编译成字节码,再对字节码逐行解释执行interpreter)。再后来,Java也发展出可以直接生成本地代码的编译器(这里指的是后端编译器JIT,将源代码直接编译成和本地机器平台相关的机器语言)现在JVM在执行Java代码的时候,会将解释执行与编译执行二者结合起来进行。如今Java采用的是解释和编译混合的模式:
执行引擎获取到,由javac将源码编译成字节码文件class.之后,然后在运行的时候通过解释器interpreter转换成最终的机器码。(解释型)
另外JVM平台支持一种叫作即时编译的技术。即时编译的目的是避免函数被解释执行,而是将整个函数体编译成为机器码,这种方式可以使执行效率大幅度提升(直接编译型)
解释执行(interpretor)特点
顾名思义就是虚拟机一边将.class文件翻译成原生机器码,一边执行相应的指令。一般在内存较少、硬件条件较低的情况下会采用解释执行。
- 解释执行的优点:
a)占用资源较少
b)启动速度快
- 解释执行的缺点
a)如果代码每次执行都要翻译一遍就会浪费不必要的资源
b)性能不够稳定,每次执行代码都翻译一遍,翻译过程中出现的问题几率增大
编译执行(JIT,Just In Time Compiler)特点
是Hotspot新推出的一种模式。这种编译模式就是将代码编译成原生机器码文件然后存在内存中,下次再需要执行这段代码就直接从内存中取其对应的原生机器码。JIT模式常用于内存等资源较充裕的设备中。JVM的Server模式使用的是JIT和编译混合模式,在程序运行的时候,JVM会先采用解释运行的模式,如果碰到多次执行的代码,就会将其标记为热点代码,以后执行这段代码就是JIT模式。
- JIT模式的优点:
a)运行起来速度快
b)只需要编译一次,性能稳定
- JIT模式的缺点
a)占用内存等资源较多
b)启动速度相对较慢
参考:juejin.cn/post/685457… 推荐