ART 中 .apk 的安装过程。与Dalvik VM安装过程的区别
Installation process of .apk within ART. Difference from Dalvik VM installation process
最近回答,里面描述了.apk
文件到androidphone的整个安装过程。关于使用 Dalvik VM
的一件事。现在我想知道使用 ART
的安装过程是否完全相同?有什么区别?
我的意思是 PackageManager、path、转换为 dex
格式 等工作。
谷歌搜索没有提供太多信息,仅提供有关性能、管理内存和类似内容的信息。
如果有知识的人可以分享这些信息,我将非常感激。
在dvm架构下,每次启动应用程序时,将整个应用程序字节码转换成dex,然后执行dex文件。因此,每次启动时都会做同样的事情,为了克服这个问题,ART 应运而生。在 ART 中,虽然在应用程序安装时仅将字节转换为 Dex,然后在每次启动时执行相同的 dex 文件,但这里不需要在每次启动时都进行转换。因此,与 dvm 相比,在 ART 中启动应用程序所需的时间更少。
Android 应用程序采用 .apk
文件格式,Java 类 转换为 DEX
字节码。 DEX
字节码格式独立于设备架构,需要在设备上将其转换为本机机器码才能 运行。这对于 ART
和 Dalvik
运行 次都是一样的。
从 Dalvik
到 ART
最显着的变化是 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
上 运行 时占用的内存空间较小。
电池寿命
随着Dalvi
k运行时间,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 运行 时间。
最近回答.apk
文件到androidphone的整个安装过程。关于使用 Dalvik VM
的一件事。现在我想知道使用 ART
的安装过程是否完全相同?有什么区别?
我的意思是 PackageManager、path、转换为 dex
格式 等工作。
谷歌搜索没有提供太多信息,仅提供有关性能、管理内存和类似内容的信息。
如果有知识的人可以分享这些信息,我将非常感激。
在dvm架构下,每次启动应用程序时,将整个应用程序字节码转换成dex,然后执行dex文件。因此,每次启动时都会做同样的事情,为了克服这个问题,ART 应运而生。在 ART 中,虽然在应用程序安装时仅将字节转换为 Dex,然后在每次启动时执行相同的 dex 文件,但这里不需要在每次启动时都进行转换。因此,与 dvm 相比,在 ART 中启动应用程序所需的时间更少。
Android 应用程序采用 .apk
文件格式,Java 类 转换为 DEX
字节码。 DEX
字节码格式独立于设备架构,需要在设备上将其转换为本机机器码才能 运行。这对于 ART
和 Dalvik
运行 次都是一样的。
从 Dalvik
到 ART
最显着的变化是 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
上 运行 时占用的内存空间较小。
电池寿命
随着Dalvi
k运行时间,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 运行 时间。