Gok*_* KP 40 android dalvik dexopt android-runtime dex2oat
Google
是从移动Dalvik
到ART
(Android的运行系统).
我试图了解它是如何改善性能的.
我找到的最好的解释是下面的图像:
其中一个已改变的主要成分是dexopt
对dex2oat
.
由于我对这些没有太多了解,有谁可以解释这些差异以及这将如何改善性能?
Jes*_*eke 63
dexopt对dex文件做了一些优化.它使用包含被调用方法的vtable索引的优化版本替换虚拟调用指令,这样它就不必在执行期间执行方法查找.
dexopt的结果是odex(优化的dex)文件.这与原始dex文件非常相似,只是它使用了一些优化的操作码,例如优化的调用虚拟指令.
dex2oat接受一个dex文件并编译它.结果本质上是一个elf文件,然后本地执行.因此,它不具有由虚拟机解释的字节码,而是具有可由处理器本机执行的本机代码.这称为AOT(提前)编译.
这两种工具通常在设备上的安装时运行.
另一个需要考虑的因素是dalvik使用了JIT(即时)编译器 - 意味着它还能够将字节码编译为本机代码.然而,主要区别在于ART提前编译所有内容,而dalvik仅使用启发式编译字节码的子集来检测最常执行的代码,并在执行期间编译.
小智 5
Android Runtime (ART)是 Android 移动操作系统使用的应用程序运行时环境。ART 取代了 Dalvik,后者是 Android 最初使用的进程虚拟机,将应用程序的字节码转换为本地指令,稍后由设备的运行时环境执行。
与 Dalvik 不同,由于 Android 2.2“Froyo”使用即时 (JIT) 编译在每次应用程序启动时编译字节码,ART 引入了使用提前 (AOT) 编译,方法是在安装时执行的一个应用程序。通过减少在应用程序操作过程中需要执行的总编译量,移动设备的处理器使用量减少,电池运行时间得到改善。同时,ART 带来了性能、垃圾收集、应用程序调试和分析方面的改进。
为了保持向后兼容性,ART 使用与 Dalvik 相同的输入字节码,通过标准.dex
文件作为 APK 文件的一部分提供,而这些.odex
文件被替换为可执行和可链接格式 (ELF) 可执行文件。一旦使用 ART 的设备上 dex2oat 实用程序编译了应用程序,它就只能从编译的 ELF 可执行文件中运行;这种方法消除了 JIT 编译所涉及的各种开销,但是在安装应用程序时需要额外的编译时间,并且应用程序占用稍大的空间来存储编译后的代码。
归档时间: |
|
查看次数: |
28727 次 |
最近记录: |