java 如何使用 Compiler

How can java use Compiler

我在某个地方研究过要在不同的处理器架构上执行 Java 是解释的。如果它将使用编译器,那么将会有一些特定于处理器架构的(机器代码)指令,并且 Java 将取决于平台。 但由于 java 使用解释器,它与处理器架构无关。

我的问题是 java 如何使用 JIT(即时)编译器?处理器的架构不会影响它吗?如果不影响,那为什么不影响呢?

您的 java 代码被解释为字节代码并且不依赖于平台。但是要 运行 你的机器代码你需要一个 JVM,JVM 是平台相关的,你不能下载 x86 JVM 并且 运行 它在 ARM 处理器上,反之亦然。

想法是 JVM 是平台相关的,但您的代码不是。

JIT 编译器不止一种。每种架构都有一个不同的架构,因此 Windows 32 位有一个,Windows 64 位有一个等等

您的 Java 代码在所有平台上都是相同的。 Java 编译器将其编译成字节码。字节码在所有平台上也是相同的。

现在我们 运行 您的 Java 程序在 Windows 32 位上。 JVM 启动并解释字节代码并将其转换为该体系结构的机器代码。请注意,JVM 专门用于此架构。

如果我们运行您的程序在另一种体系结构上运行,将使用 JVM 的另一种变体来解释字节码。

这就是为什么您在下载 JRE 时会看到所有这些不同的下载链接:

java 程序生命周期如下。 源代码被编译成Java字节码(又名.class文件), Java 字节码然后由 JVM 解释 执行即时编译发送您的特定处理器架构可以理解的指令。

重要的是要理解编译只是 "translation" 的另一种说法,并不总是意味着编译为二进制文件。此外,解释类似,但根据程序的需要按指令完成。

但更具体地说,在您的问题中,JIT 是由 JVM 完成的解释,它专门针对每个处理器架构进行编码。