为什么JAVA在安装后不立即将其IL编译为Native代码?

时间:2015-10-04 09:39:41

标签: java jvm jit

我刚读过C++ performance vs Java/C#

  

正如之前的帖子中所说,JIT可以在运行时将IL /字节码编译为本机代码。提到的成本,但没有得出结论:

     

JIT有一个大问题是它无法编译所有内容:JIT编译需要时间,因此JIT只会编译代码的某些部分,而静态编译器会产生完整的原生二进制文件:对于某种类型对于程序,静态编译器将简单地胜过JIT。

我很好奇为什么java在设备中安装时不会编译所有内容。

如果确实如此,我们不需要考虑编译时的性能损失,并且可以使用不同的设备。

1 个答案:

答案 0 :(得分:5)

实际上它依赖于JVM。新的Google JVM使用AOT:

  

ART使用提前编译(AOT)编译器,在您安装应用程序时编译为机器代码。

如果你问为什么前Sun,现在甲骨文的JVM没有使用AOT,那么Sun当时的工程师选择。对于桌面Java,(通常)没有安装应用程序的步骤,允许执行AOT并在加载时编译整个类路径太耗时。

更多here,当然还有Google android网站。