为什么说 Java 语言是编译与解释并存?

496 阅读2分钟

1. 编译型语言与解释型语言的区别

image-20231029095852485

我们可以将高级编程语言按照程序的执行方式分为两种:

  1. 编译型:编译型语言会通过编译器将源代码一次性翻译成可被该平台执行的机器码。一般情况下,编译语言的执行速度比较快,开发效率比较低。常见的编译性语言有 C、C++、Go、Rust 等等。
  2. 解释型:解释型语言会通过一句一句的将代码解释(interpret)为机器代码后再执行。解释型语言开发效率比较快,执行速度比较慢。常见的解释性语言有 Python、JavaScript、PHP 等等。

2. Java程序编译与运行的过程

image-20231029100037190

  1. 从上图中可以看出,Java程序最终执行需要经过两步:(1).Java文件先编译成.class文件,(2)然后再进行解释运行;
  2. .class转换成机器码文件的第二步,先判断字节码文件中哪些方法是经常被调用的,即热点代码,热点代码会经过JIT编译(先将全部的热点代码编译成机器码后执行)成机器码文件(如果是第一次编译该热点代码,会将编译好的机器码保存下来,下次直接使用。),非热点代码会经过解释器进行解释(一句一句进行解释成机器码后执行)。

3. 为什么说 Java 语言是编译与解释并存?

  1. 在第二张图的第二步中,如果存在热点代码是包含了编译和运行两步的:(1)热点代码通过JIT编译成机器代码,即编译;(2)非热点代码通过解释器解释成机器码,即解释,所以说Java语言是编译与解释共存。
  2. 容易造成误区的是,在第二张图中第一步是编译,第二步中带有解释器的字样,就认为是编译和解释共存。不是的,编译和解释并存是看第二步,即.class文件在转换成机器码文件时是否存在编译和解释的情况。

4. 总结

  1. 编译型语言是全部转换成机器码文件后再执行,速度慢;解释性语言是转换成一句机器码就执行一句,速度快;
  2. 编译和解释并存是看.class文件在转换成机器码文件时是否存在编译和解释的情况。

5. 参考

  1. Javaguide

  2. 傻傻分不清:JIT编译器,解释器,AOT编译器

  3. JavaSE第一章复习——尚硅谷(Time:28:30)