我真的很难理解以下事情
以前我知道:
编译Java程序时将生成 .class
文件 . 在那个代码是以字节的形式 . 然后 JVM
将该字节代码转换为机器可理解的格式 .
现在我在one of the questions in SO看到了
即时(JIT)编译器是运行时解释器的一个特性,它不是每次调用方法时都解释字节码,而是将字节码编译成运行机器的机器代码指令 .
所以这里JIT将字节码转换为机器指令 . 那么JVM的用途是什么 . 我们可以用JIT做到这一点 . 据我所知,JIT仅用于提高JVM的性能 .
4 回答
JIT只是JVM的一部分 . 其他部分包括字节码解释器,类加载验证和链接机制,以及反射,I / O等内容的本机代码支持 .
从这个意义上讲,JIT并没有使JVM运行得更快 . 相反,它使Java代码运行得更快......而不是JVM只是解释它 .
实际上,JVM确实开始解释字节码 . 经过一段时间后,JVM使用其JIT编译器将大量使用的方法编译为本机代码,使用在解释时收集的统计信息来调整手头问题的代码 .
顺便说一句,你引用的这部分文字是笨拙的,技术上不准确:
实际上,JIT不是解释器的一个特性 . 相反,JIT是与解释器一起工作的JVM的功能 .
要明确:
JVM执行以下所有操作:
JIT
Java虚拟机(JVM)提供了运行Java程序的整个环境 . 它与操作系统集成,加载类并运行程序 . Just-In-Time编译器(JIT)只是一小部分可以被禁用(-Xint)但是在启用时,它提供了有用的性能改进 . 已经有JVM的实现没有包含JIT,并且通过预编译Java到机器代码的工作方式与传统语言(如C或C)相同 .
它及时编译它以便JVM进行优化 .