最近我回答this question,其中描述了.apk
文件到android手机的整个安装过程。关于使用Dalvik VM
的一件事。现在我想知道使用ART
安装过程是否完全相同?有什么区别?
我指的是 PackageManager ,路径,转换为dex
格式等的工作。
谷歌搜索没有提供太多信息,只提供有关性能,管理内存和类似内容的信息。
如果有知识的人可以分享这些信息,我将非常感激。
答案 0 :(得分:4)
Android应用程序采用.apk
文件格式,Java类转换为DEX
字节码。 DEX
字节码格式独立于设备架构,需要转换为本机机器代码才能在设备上运行。对于ART
和Dalvik
运行时,这都是相同的。
从Dalvik
到ART
的最重要变化是Dalvik
基于 即时 ({ {1}})编译,而JIT
基于 Ahead of of Time (ART
)编译。
使用 Dalvik JIT编译器,每次运行应用程序时,它都会动态地将AOT
字节码的一部分转换为机器代码。随着执行的进行,编译和缓存更多的字节码。另一方面,ART配备了Ahead-of-Time编译器。在应用程序的安装阶段,它会将Dalvik
字节码静态转换为机器代码并存储在设备的存储中。这是在设备上安装应用程序时发生的一次性事件。
<强> 性能 强>
DEX
运行时优于ART
运行时的最重要好处是应用程序在Dalvik
上运行得更快。由于ART
字节码在安装过程中已被转换为机器代码,因此在运行时期间不需要额外的时间来编译它。由于同样的原因,使用DEX
启动时,应用启动速度也会更快。
由于ART
需要Dalvik
代码缓存的额外内存,因此应用程序在JIT
上运行时占用的内存占用量较小。
电池续航时间
使用ART
k运行时,Dalvi
编译绑定JIT
。由于CPU
编译,AOT
可以释放CPU在应用程序执行期间将ART
字节码转换为机器代码,从而减少能耗。使用DEX
会延长电池寿命,这是需要重新充电的时间间隔。
安装时间
由于ART
编译器在应用程序安装期间将AOT
字节码转换为机器代码,因此在运行DEX
的设备上安装应用程序需要更长时间。考虑到我们在上一节中讨论过的更快执行和更短启动时间的好处,这个在应用程序安装期间只发生一次的额外时间非常值得。
存储空间
使用ART
运行时,ART
编译器会将应用程序的AOT
字节码转换为机器代码并将其存储在设备的存储中。预编译的二进制文件比DEX字节码占用更多的空间。因此,与DEX
运行时相比,可以产生更大的存储空间。
<强> 摘要 强>
到目前为止,我们已经为Android引入了新的Dalvik
运行时。我们还讨论了它的好处和妥协,集中在其提前编译和性能改进。目前已发布供预览但仍在积极开发和优化中,此时我们无法提供关于切换到ART
所获得多少性能的定量结论。有一点可以肯定的是,ART会将ART Runtime
替换为基于Dalvik
的设备上的Android运行时。
答案 1 :(得分:0)
在dvm架构中,每次应用程序启动时将整个应用程序字节代码转换为dex,然后执行dex文件。因此,当每次发射时都要做同样的事情,所以要克服这个问题,ART就会出现。在ART中,在应用程序安装时只将字节转换为Dex,然后在每次启动时执行相同的dex文件,这里不需要在每次启动时都需要转换。因此,与dvm相比,在ART中启动应用程序所需的时间更少。