【发布时间】:2016-01-01 03:11:59
【问题描述】:
我刚刚读到C++ performance vs Java/C#。
如前文所述,JIT 可以在运行时将 IL/字节码编译为本机代码。提到了成本,但没有得出结论:
JIT 的一个大问题是它不能编译所有东西:JIT 编译需要时间,所以 JIT 只会编译部分代码,而静态编译器会生成完整的原生二进制文件:对于某些程序,静态编译器将轻松胜过 JIT。
我很好奇为什么 java 在设备中安装时不会编译所有内容。
如果是这样,我们就不需要考虑编译时间带来的性能损失,并且符合不同的设备。
【问题讨论】:
-
它没有这样做,因为它没有被定义为这样做。你的问题?
-
这有利有弊。 JIT 编译代码的一个优点是编译器知道在编译代码时将如何使用代码。如果你提前编译它,这是不可能的(除非你从以前的运行中提供数据)
-
Java 确实控制了整个设备,您可以更改任何文件或任何 JAR,而无需使用 JVM 来执行此操作,因此它不知道进程容易出错。对于 Android,它知道您何时安装应用程序或取消日期,因此它知道要编译和更改什么。此外,就设备的启动时间而言,动态编译的成本更高。对于服务器而言,这比它可以支持的用户数量和长期效率更重要。