Google
正在从Dalvik
迁移到ART
(安卓运行时)。
我试图理解,它将如何提高性能。
我找到的最好的解释是下图:
其中一个已更改的主要组件是从dexopt
到dex2oat
。
由于我对这些没有太多的了解,谁能解释一下它们之间的区别,以及这将如何提高性能?
发布于 2014-10-09 01:40:12
dexopt对dex文件进行了一些优化。它做一些事情,比如用包含被调用方法的vtable索引的优化版本替换虚拟调用指令,这样它就不必在执行过程中执行方法查找。
dexopt的结果是一个odex (优化的索引)文件。这与原始的dex文件非常相似,只是它使用了一些优化的操作码,比如优化的invoke虚拟指令。
dex2oat获取一个dex文件并编译它。结果本质上是一个elf文件,然后在本地执行。因此,它不再具有由虚拟机解释的字节码,而是具有可由处理器本机执行的本机代码。这就是所谓的AOT (预编译)。
这两个工具通常都运行at install time on the device。
另一个要考虑的因素是dalvik使用了JIT (just-in-time)编译器-这意味着它也能够将字节码编译为本机代码。然而,主要的区别是ART提前编译所有东西,而dalvik只使用启发式方法编译字节码的一个子集,以检测执行频率最高的代码,并在执行期间编译。
发布于 2018-10-12 12:48:19
Android Runtime (ART)是安卓移动操作系统使用的应用程序运行时环境。ART取代了Dalvik,Dalvik最初是Android使用的进程虚拟机,并将应用程序的字节码转换为本机指令,然后由设备的运行时环境执行。
与Dalvik不同的是,Dalvik自Android 2.2 "Froyo“以来,在每次启动应用程序时都使用即时(JIT)编译来编译字节码,而ART通过在安装应用程序时执行AOT编译来引入它的使用。通过减少在应用程序的操作中需要执行的编译的总量,减少了移动设备的处理器使用,并改善了电池运行时间。同时,ART在性能、垃圾收集、应用程序调试和分析方面带来了改进。
为了保持向后兼容性,ART使用与Dalvik相同的输入字节码,通过标准.dex
文件作为APK文件的一部分提供,而.odex
文件被可执行和可链接格式(ELF)可执行文件取代。一旦使用ART的设备上dex2oat实用程序编译了应用程序,它将完全从编译的ELF可执行文件中运行;这种方法消除了与即时编译相关的各种开销,但是在安装应用程序时需要额外的编译时间,并且应用程序会占用稍微大一点的空间来存储编译后的代码。
https://stackoverflow.com/questions/26254538
复制相似问题