ART 中 .apk 的安装过程。与Dalvik VM安装过程的区别

Installation process of .apk within ART. Difference from Dalvik VM installation process

最近回答,里面描述了.apk文件到androidphone的整个安装过程。关于使用 Dalvik VM 的一件事。现在我想知道使用 ART 的安装过程是否完全相同?有什么区别? 我的意思是 PackageManagerpath转换为 dex 格式 等工作。 谷歌搜索没有提供太多信息,仅提供有关性能、管理内存和类似内容的信息。 如果有知识的人可以分享这些信息,我将非常感激。

在dvm架构下,每次启动应用程序时,将整个应用程序字节码转换成d​​ex,然后执行dex文件。因此,每次启动时都会做同样的事情,为了克服这个问题,ART 应运而生。在 ART 中,虽然在应用程序安装时仅将字节转换为 Dex,然后在每次启动时执行相同的 dex 文件,但这里不需要在每次启动时都进行转换。因此,与 dvm 相比,在 ART 中启动应用程序所需的时间更少。

Android 应用程序采用 .apk 文件格式,Java 类 转换为 DEX 字节码。 DEX 字节码格式独立于设备架构,需要在设备上将其转换为本机机器码才能 运行。这对于 ARTDalvik 运行 次都是一样的。

DalvikART 最显着的变化是 Dalvik 基于 Just-in-Time (JIT) 编译,而 ART 基于 Ahead-of-Time ( AOT) 编译。

使用 Dalvik JIT 编译器,每次应用程序 运行 时,它都会动态地将一部分 Dalvik 字节码转换为机器码。随着执行的进行,更多的字节码被编译和缓存。另一方面,ART 配备了 Ahead-of-Time 编译器。在应用程序的安装阶段,它会将 DEX 字节码静态翻译成机器码并存储在设备的存储器中。这是一次性事件,当应用程序安装到设备上时会发生。

性能

ART运行time 比 Dalvik运行time 最重要的好处是应用 运行s 在 ART 上更快.因为DEX字节码在安装的时候已经被翻译成机器码了,所以在运行的时候不需要额外的时间去编译。出于同样的原因,当使用 ART 启动时,应用程序启动速度也更快。

因为 Dalvik 需要额外的内存用于 JIT 代码缓存,所以应用程序在 ART 上 运行 时占用的内存空间较小。

电池寿命

随着Dalvik运行时间,JIT编译被CPU绑定。由于 AOT 编译,ART 使 CPU 无需在应用程序执行期间将 DEX 字节码转换为机器码,从而降低能耗。使用 ART 可延长电池寿命,即电池需要充电的时间间隔。

安装时间

因为 AOT 编译器在应用程序安装期间将 DEX 字节码翻译成机器码,所以应用程序在 ART 运行 设备上的安装时间更长。考虑到我们在上一节中讨论的更快执行和更短启动时间的好处,在应用程序安装期间只发生一次的额外时间是非常值得的。

存储空间

ART 运行 时间,AOT 编译器将应用程序的 DEX 字节码翻译成机器码并将其存储在设备的存储器中。预编译二进制比DEX字节码多space。因此,与 Dalvik 运行time.

相比,需要更大的存储空间

总结

到目前为止,我们已经为 Android 引入了新的 ART 运行 时间。我们还讨论了它的优势和妥协,集中讨论了它的提前编译和性能改进。目前已发布预览版,仍在积极开发和优化中,目前我们无法提供关于切换到 ART Runtime 后性能提升多少的定量结论。可以肯定的一件事是,在基于 x86 的设备上,ART 将取代 Dalvik 作为 Android 运行 时间。

Source.