34

我真的很难理解以下内容

以前我知道:

当一个Java程序被编译.class时会生成文件。在那个代码中是字节的形式。然后JVM将把该字节码翻译成机器可以理解的格式。

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

即时 (JIT) 编译器是运行时解释器的一项功能,它不会在每次调用方法时都解释字节码,而是将字节码编译成正在运行的机器的机器代码指令

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

4

4 回答 4

37

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

从这个意义上说,JIT 根本不会让 JVM 运行得更快。相反,它使Java 代码运行得更快……比 JVM 只是解释它。

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

顺便说一句,您引用的这部分文字很笨拙,在技术上也不准确:

即时 (JIT) 编译器是运行时解释器的一项功能...... (上下文)

事实上,JIT 并不是解释器的一个特性。相反,JIT 是与解释器 一起工作的 JVM 的功能。

于 2013-05-08T11:58:11.530 回答
2

要清楚:

JVM 执行以下所有操作:

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

即时通讯

JVM 编译类文件时,并没有完成完整的类文件;它仅根据需要编译其中的一部分。这避免了对完整源代码的大量解析。这种类型的编译称为 JIT 或 Just-In-Time 编译。JVM 是依赖于平台(OS)的代码生成 JIT 是面向平台的,生成本机字节码,所以它比 JVM 更快:)

于 2013-05-08T11:38:12.113 回答
1

Java 虚拟机 (JVM) 为运行 Java 程序提供了整个环境。它与操作系统集成,加载类并运行程序。Just-In-Time 编译器 (JIT) 只是一小部分,可以禁用 (-Xint),但启用后,可提供有用的性能改进。已经有不包括 JIT 的 JVM 实现,以及通过将 Java 预编译为与传统语言(如 C 或 C++)相同的机器代码来工作的实现。

于 2013-05-16T16:39:58.687 回答
0

它通过优化及时为 JVM 编译它。

于 2013-05-08T11:44:00.200 回答