阿里架构师讲面试:JVM执行引擎你清楚吗

376 阅读2分钟

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… 推荐

觉得有收获的话帮忙点个赞吧,让有用的知识分享给更多的人

## 欢迎关注掘金号:五点半社

## 关注微信公众号:五点半社(工薪族的财商启蒙)##