Java代码被编译为字节码,它可以在许多平台上移植。 但Java也是JIT编译的,它是即时发生的。
这是否意味着Java编译两次?我们首先通过JVM生成字节码和第二个字节码? 感谢。
答案 0 :(得分:7)
TMK,在编译时,您正在为JVM平台进行编译。然后,当您在任何计算机上的JVM上运行应用程序时,经常使用的某些代码部分将被编译为该计算机本机的代码以进行优化。
所以简而言之:是的,但是有一个很好的理由
答案 1 :(得分:7)
如果JVM“足够热”,你的代码可以由字节码编译成本机代码;并且可能会多次编译,旧版本将被丢弃,具体取决于程序的运行时特性。
JIT是一个复杂的野兽;事实上,Sun JVM有两个JIT(-client和-server),它们的行为彼此不同,有些实现甚至支持同时运行的两个JIT(因此您可能已经解释了字节码与应用程序中两个不同JIT编译的代码一起运行)
如果你真的对这个主题感兴趣,我建议你阅读更多关于Hotspot(最常见的JIT,因为它是Sun的)。您可以从Sun's page开始。
答案 2 :(得分:2)
这是否意味着Java编译两次? 首先由我们来生成字节码 JVM的第二个?感谢。
您可以说,一旦使用源代码(编译器)中提供的信息,那么在运行时(JVM / JIT)中有关特定硬件的信息时是可用的,以及一些分析来决定什么是JIT编译的。
答案 3 :(得分:1)
机制是
Java - >字节代码(由java编译器编译)
ByteCode - >本机代码(由JVM解释)
答案 4 :(得分:0)
简短回答:是的。
最长的一个:这是两件不同的事情。 第一个编译是从源代码到字节码,通常在编译字段中调用中间表示(IR)。
然后VM获取字节码并将其转换回安装它的平台上的本机代码。
这是两种完全不同的编译方式。第二个甚至不是一个很好的编译,因为没有语法检查器范围分析器......好吧有一些检查但不是你在编译器中的那种检查。