dexopt和dex2oat之间的区别?

Google正在从Dalvik转向ART (Android Runtime)。

我试图去了解,它将如何提高性能。

我发现的最好的解释是下面的图像:

Dalvik和ART

其中一个主要组成部分是dex2oat

由于我对这些没有太多的想法,任何人都可以解释这种差异,以及这将如何改善性能?

Solutions Collecting From Web of "dexopt和dex2oat之间的区别?"

dexopt在dex文件上做了一些优化。 它执行一些操作,例如使用包含被调用方法的vtable索引的优化版本replace虚拟调用指令,以便在执行过程中不必执行方法查找。

dexopt的结果是一个odex(优化的dex)文件。 这与原始的dex文件非常相似,只是它使用了一些优化的操作码,如优化的调用虚拟指令。

dex2oat需要一个dex文件并编译它。 结果本质上是一个elf文件,然后本地执行。 因此,不是由虚拟机解释的字节码,而是现在具有可以由处理器本地执行的本地代码。 这被称为AOT(提前)编译。

这两种工具通常在安装时在设备上运行。

另一个要考虑的因素是dalvik使用了JIT(即时编译器)编译器 – 这意味着它也能够将字节码编译为本地代码。 然而,主要区别在于,ART会提前编译所有内容,而dalvik仅使用启发式方法编译字节码的子集,以检测执行最频繁的代码,并在执行过程中进行编译。