Java是编译的还是解释型编程语言?

2022-08-31 06:07:01

过去,我使用C++作为编程语言。我知道用C++编写的代码会经历一个编译过程,直到它成为目标代码“机器代码”。

我想知道Java在这方面是如何工作的。用户编写的Java代码如何由计算机运行?


答案 1

Java 实现通常使用两步编译过程。Java 源代码由 Java 编译器编译为字节码。字节码由 Java 虚拟机 (JVM) 执行。现代 JVM 使用一种称为实时 (JIT) 编译的技术,将字节码编译为硬件 CPU 在运行时动态理解的本机指令。

JVM的某些实现可能会选择解释字节码,而不是JIT将其编译为机器代码并直接运行它。虽然这仍然被认为是一个“解释器”,但它与读取和执行高级源代码的解释器完全不同(即在这种情况下,Java源代码不是直接解释的,字节码,Java编译器的输出,是。

从技术上讲,可以将Java编译为本机代码并运行生成的二进制文件。也可以直接解释 Java 代码。

总而言之,根据执行环境,字节码可以是:

  • 提前编译并作为本机代码执行(类似于大多数C++编译器)
  • 及时编译并执行
  • 解释
  • 由支持的处理器直接执行(字节码是某些 CPU 的本机指令集)

答案 2

enter image description here

用Java编写的代码是:

  • 首先由一个名为javac的程序编译为字节码,如上图左侧所示;
  • 然后,如上图的右侧部分所示,另一个名为java的程序启动Java运行时环境,它可以使用Java解释器/JIT编译器编译和/或解释字节码。

Java何时解释字节码,何时编译字节码?应用程序代码最初是被解释的,但JVM监视哪些字节码序列经常执行,并将它们转换为机器代码,以便在硬件上直接执行。对于只执行几次的字节码,这节省了编译时间并减少了初始延迟;对于经常执行的字节码,JIT编译用于在慢速解释的初始阶段之后高速运行。此外,由于程序花费大部分时间执行其少量代码,因此减少的编译时间非常重要。最后,在初始代码解释期间,可以在编译之前收集执行统计信息,这有助于更好地执行优化。


推荐