JIT编译器如何提高应用程序的性能?

6
我刚刚读到Android添加了JIT编译器,性能提高了450%,我知道什么是JIT,但我不太明白为什么它比正常编译的代码更快?或者与Android平台旧方法(类似于Java运行编译后的字节码)有何不同?感谢您的帮助!
编辑:这非常有趣,谢谢!我希望我可以选择每个答案作为正确答案 :)

你在哪里看到JIT可以提高450%的性能? - Nate
它已经遍布网络:http://www.providingnews.com/android-2-2-450-faster.html - igorgue
JIT编译器并不比已编译的代码更快。它只比解释性代码更快。因为JIT编译器不能像静态编译器那样花费更多时间进行优化,所以代码不如正常编译的代码快。此外,每次运行代码都需要编译的时间。 - PauliL
4个回答

5

首先声明,我对Android一点也不熟悉。无论如何...

我熟悉JIT编译的两个应用。一个是将字节码转换为实际的机器指令。第二个是超级优化

JIT字节码编译加速了执行,因为字节码只被解释一次,而不是每次执行时都要解释。这可能是您看到的优化类型。

JIT超级优化搜索真正最佳的指令集来实现程序逻辑,有点玄学。虽然我读过100%至200%的速度提升报告,但这可能不是您所说的。


3

虚拟机需要将编译后的字节码转换成机器指令才能运行。以前使用解释器来完成这项工作,对于只调用一次的代码来说还可以,但对于需要反复调用的函数来说不够优化。

当JIT版本的虚拟机取代最初的解释器版本时,Java虚拟机也看到了类似的加速。


澄清一下,在Android上的“类Java”虚拟机Dalvik是一个字节码解释器。在Android 2.2中,谷歌创建了一个字节码到机器码的编译器。对于那些本地编译开销小于执行成本的代码,使用JIT的Dalvik应该会带来明显的性能提升。 - Yann Ramin

2

JIT编译器了解自身的系统,可以利用这些知识生成比字节码更高效的代码,据传它甚至可以超越预编译程序。

这就是为什么JIT编译器可以比传统的Java系统更快,传统系统只能运行字节码,这也是Android所使用的。


1
除了使用编译器将Java代码编译为本地代码之外,JIT还可以进行只有在运行时才能完成的优化。
JIT可以监视应用程序的行为并优化那些真正有影响的使用模式,即使这样做会牺牲代码执行路径中其他不太常用的分支。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接