Java是编译的还是解释型编程语言?
2022-08-31 06:07:01
过去,我使用C++作为编程语言。我知道用C++编写的代码会经历一个编译过程,直到它成为目标代码“机器代码”。
我想知道Java在这方面是如何工作的。用户编写的Java代码如何由计算机运行?
过去,我使用C++作为编程语言。我知道用C++编写的代码会经历一个编译过程,直到它成为目标代码“机器代码”。
我想知道Java在这方面是如何工作的。用户编写的Java代码如何由计算机运行?
Java 实现通常使用两步编译过程。Java 源代码由 Java 编译器编译为字节码。字节码由 Java 虚拟机 (JVM) 执行。现代 JVM 使用一种称为实时 (JIT) 编译的技术,将字节码编译为硬件 CPU 在运行时动态理解的本机指令。
JVM的某些实现可能会选择解释字节码,而不是JIT将其编译为机器代码并直接运行它。虽然这仍然被认为是一个“解释器”,但它与读取和执行高级源代码的解释器完全不同(即在这种情况下,Java源代码不是直接解释的,字节码,Java编译器的输出,是。
从技术上讲,可以将Java编译为本机代码并运行生成的二进制文件。也可以直接解释 Java 代码。
总而言之,根据执行环境,字节码可以是:
用Java编写的代码是:
Java何时解释字节码,何时编译字节码?应用程序代码最初是被解释的,但JVM监视哪些字节码序列经常执行,并将它们转换为机器代码,以便在硬件上直接执行。对于只执行几次的字节码,这节省了编译时间并减少了初始延迟;对于经常执行的字节码,JIT编译用于在慢速解释的初始阶段之后高速运行。此外,由于程序花费大部分时间执行其少量代码,因此减少的编译时间非常重要。最后,在初始代码解释期间,可以在编译之前收集执行统计信息,这有助于更好地执行优化。