如果JIT正在执行到机器指令的字节码转换,那么JVM的用途是什么

Anu*_*sha 30 java jit jvm

我真的很难理解以下事情

以前我知道:

编译Java程序时.class将生成文件.在那个代码是字节的形式.然后将该JVM字节代码转换为机器可理解的格式.

现在我在SO中的一个问题中看到了

Just-In-Time(JIT)编译器是运行时解释器的一个特性,它不是在每次调用方法时解释字节码,而是将字节码编译成运行机器的机器代码指令.

所以这里JIT将字节码转换为机器指令.那么JVM的用途是什么.我们可以用JIT做到这一点.据我所知,JIT仅用于提高JVM的性能.

Ste*_*n C 32

JIT只是JVM的一部分.其他部分包括字节码解释器,类加载验证和链接机制,以及反射,I/O等内容的本机代码支持.

从这个意义上说,JIT并没有使JVM运行得更快.相反,它使Java代码运行得更快......而不是JVM只是解释它.

实际上,JVM 确实开始解释字节码.经过一段时间后,JVM使用其JIT编译器将大量使用的方法编译为本机代码,使用在解释时收集的统计信息来调整手头问题的代码.

顺便说一下,你引用的这部分文字是笨拙的,技术上不准确:

实时(JIT)编译器是运行时解释器的一个特性... (上下文)

实际上,JIT不是解释器的一个特性.相反,JIT是解释器一起工作的JVM的功能.


ABr*_*m K 2

需要明确的是:

\n\n

JVM 执行以下所有操作:

\n\n
\n

它位于操作系统的顶层,并在已编译的 java 程序和操作系统之间提供抽象。这样,java编译的程序就不必担心它必须在哪个平台上工作。Java 程序将代码编译成 JVM 可以理解和执行的字节码。

\n
\n\n

准时生产

\n\n
\n

当JVM编译class文件时,它并没有\xe2\x80\x99完成完整的class\n文件;它只根据需要编译其中的一部分。这避免了对完整源代码的繁重解析。这种类型的编译称为\n JIT 或即时编译。\n JVM 依赖于平台(操作系统)代码生成\n JIT 是面向平台的,生成本机字节代码,因此它比 JVM 更快: )

\n
\n