Google正在从Dalvik移至ART(Android运行时)。

我试图了解如何提高性能。

我发现的最佳解释是下图:

已更改的主要组件之一是dexoptdex2oat

既然我对此不太了解,谁能解释其中的区别以及这将如何提高性能?

最佳答案

dexopt对dex文件进行了一些优化。它执行的操作类似于用包含被调用方法的vtable索引的优化版本替换虚拟调用指令,从而使其在执行期间不必执行方法查找。

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

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

两种工具通常都运行at install time on the device

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

08-18 04:21