Java代码被编译为字节码,它可以在许多平台上移植.但Java也是JIT编译的,它是即时发生的.
这是否意味着Java编译两次?我们首先通过JVM生成字节码和第二个字节码?谢谢.
TMK,在编译时,您正在为JVM平台进行编译.然后,当您在任何计算机上的JVM上运行应用程序时,经常使用的某些代码部分将被编译为该计算机的本机代码以进行优化.
所以简而言之:是的,但是有一个很好的理由
如果JVM"足够热",你的代码可以由字节码编译成本机代码; 并且可能会多次编译,旧版本将被丢弃,具体取决于程序的运行时特性.
JIT是一个复杂的野兽; 事实上,Sun JVM有两个JIT(-client和-server),它们的行为彼此不同,有些实现甚至支持同时运行的两个JIT(因此您可能已经解释了字节码与应用程序中两个不同JIT编译的代码一起运行) .
如果你真的对这个主题感兴趣,我建议你阅读更多关于Hotspot(最常见的JIT,因为它是Sun的一个).您可以从Sun的页面开始.