Java 代码被编译成字节码,它可以在许多平台上移植。
但是 Java 也是即时编译的。
这是否意味着 Java 编译了两次?首先由我们生成字节码,第二个由 JVM 生成?
谢谢。
最佳答案
如果“足够热”,JVM 可能会将您的代码从字节码编译为 native 代码;它可能会被多次编译,旧版本会被丢弃,这取决于您程序的运行时特性。
JIT 是一个复杂的野兽;事实上,Sun JVM 有两个行为不同的 JIT(-client 和 -server),有些实现甚至支持两个 JIT 一起运行(因此您可能已经解释了字节码与应用程序中由两个不同 JIT 编译的代码一起运行) .
如果您真的对这个主题感兴趣,我建议您阅读有关 Hotspot(最常见的 JIT,因为它是 Sun 的 JIT)的更多信息。您可以从 Sun's page 开始。
关于Java 代码和 JIT 编译,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3383469/