Java代码和JIT编译

Chi*_*ron 3 java jit

Java代码被编译为字节码,它可以在许多平台上移植.但Java也是JIT编译的,它是即时发生的.

这是否意味着Java编译两次?我们首先通过JVM生成字节码和第二个字节码?谢谢.

The*_*eLQ 7

TMK,在编译时,您正在为JVM平台进行编译.然后,当您在任何计算机上的JVM上运行应用程序时,经常使用的某些代码部分将被编译为该计算机的本机代码进行优化.

所以简而言之:是的,但是有一个很好的理由


van*_*nza 7

如果JVM"足够热",你的代码可以由字节码编译成本机代码; 并且可能会多次编译,旧版本将被丢弃,具体取决于程序的运行时特性.

JIT是一个复杂的野兽; 事实上,Sun JVM有两个JIT(-client和-server),它们的行为彼此不同,有些实现甚至支持同时运行的两个JIT(因此您可能已经解释了字节码与应用程序中两个不同JIT编译的代码一起运行) .

如果你真的对这个主题感兴趣,我建议你阅读更多关于Hotspot(最常见的JIT,因为它是Sun的一个).您可以从Sun的页面开始.

  • 很多事情都会导致JIT丢弃旧的汇编; 采取从未采用过的不同分支这样简单的事情会导致JIT发出"故障"并丢弃旧代码(这是基于每次都采用的相同分支). (2认同)