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

时间:2013-05-08 11:30:01

标签: java jvm jit

我真的很难理解以下事情

以前我知道:

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

现在我在one of the questions in SO

中看到了
  

实时(JIT)编译器是运行时的一项功能   解释器,而不是每次一个方法解释字节码   被调用,将字节码编译成机器码   跑步机的说明

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

4 个答案:

答案 0 :(得分:31)

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

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

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

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

  

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

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

答案 1 :(得分:2)

要明确:

JVM执行以下所有操作:

  

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

JIT

  

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

它及时为JVM进行优化编译。