我知道Java程序首先被编译并生成字节码,这种字节码是平台无关的。但是我的问题是为什么在下一阶段解释这种字节码而不是编译,即使在一般情况下编译比解释更快?
你回答了自己的问题。字节码是与平台无关的。如果编译后的代码被执行,它将不能在每个操作系统上工作。这就是C语言所做的,这也是为什么您必须为每个操作系统拥有一个版本的原因。
正如其他人建议的那样,JVM实际上使用JIT编译代码。只是没有保存在任何地方。以下是一个简洁的引用来总结:
在一个字节码编译系统中,源代码被翻译成一个称为字节码的中间表示形式。字节码不是任何特定计算机的机器代码,并且可以在计算机体系结构之间移植。然后,这些字节码可以由虚拟机解释或运行。JIT编译器会分多个部分(或者很少完全)读取字节码,并将其交互式编译成机器语言,以便程序可以更快速地运行。
字节码是平台无关的。一旦编译成字节码,它就可以在任何系统上运行。
正如维基百科所说,
即时编译(JIT)
,也被称为动态翻译,是一种提高计算机程序运行时性能的方法。
我建议您阅读这篇文章。它为Java虚拟机提供了JIT编译器的基本工作原理
。
bytecode
汇编程序。然后通过解释和(大量)针对底层硬件生成的优化代码来模拟处理器。这样就可以运行在bytecode
上的程序了。 - bestsss