我刚读过C++ performance vs Java/C#。
正如之前的帖子中所说,JIT可以在运行时将IL /字节码编译为本机代码。提到的成本,但没有得出结论:
JIT有一个大问题是它无法编译所有内容:JIT编译需要时间,因此JIT只会编译代码的某些部分,而静态编译器会产生完整的原生二进制文件:对于某种类型对于程序,静态编译器将简单地胜过JIT。
我很好奇为什么java在设备中安装时不会编译所有内容。
如果确实如此,我们不需要考虑编译时的性能损失,并且可以使用不同的设备。
答案 0 :(得分:5)
实际上它依赖于JVM。新的Google JVM使用AOT:
ART使用提前编译(AOT)编译器,在您安装应用程序时编译为机器代码。
如果你问为什么前Sun,现在甲骨文的JVM没有使用AOT,那么Sun当时的工程师选择。对于桌面Java,(通常)没有安装应用程序的步骤,允许执行AOT并在加载时编译整个类路径太耗时。
更多here,当然还有Google android网站。