Android运行时(ART)是Android上的应用程序和一些系统服务所使用的管理运行时。ART和它的前身Dalvik最初是为Android项目专门创建的。ART和Dalvik是运行Dex字节码的兼容运行时,因此为Dalvik开发的应用程序在使用ART运行时应该可以正常运行。

Dalvik

Dalvik虚拟机或DVM是一个基于寄存器的虚拟机,由Dan Bornstein设计和编写。Dalvik虚拟机是Bornstein以冰岛Eyjafjörður的渔村 “Dalvík “命名的,他的一些祖先曾经住在那里。Dalvik是安卓操作系统中的一个不连续的进程虚拟机(VM),执行为安卓编写的应用程序。Dalvik字节码格式仍被用作发布格式,但在较新的安卓版本中不再在运行时使用。安卓本身是一个Linux系统,上面有Dalvik。DVM接收安卓应用程序,将它们从java代码变成Linux系统可以运行的字节码。基本上,一个普通的java代码在运行时被JIT编译器编译成字节码,在机器上运行。这可能会导致速度下降,因为在运行时的编译,特别是在运行时的编译是很耗时的。因此,制造商和OEMs有时会把他们的应用程序作为odexed推出。有2种类型的文件:

  • .dex(Dalvik可执行文件)文件是一个安卓的编译代码文件。这些.dex文件然后被压缩成一个.apk文件。
  • .odex文件由安卓操作系统创建,以节省空间并提高安卓应用(.apk文件)的启动速度。

dexopt用于将DEX优化为ODEX(优化的DEX),其中包含优化的字节码。因此,DVM的整个过程可以总结为:

JAVA源代码(.java)->字节码(.dex)->DVM

DVM对于低存储设备来说是更好的。但它的速度较慢,因为编译是在安装后进行的。

ART

随着安卓版本的更新,特别是从4.4版本KitKat开始,出现了ART的概念,作为DVM的替代。ART(安卓运行时间)是DVM的继承者,它使用相同的字节码和.dex文件(但不是.odex文件),其继承的目的是对最终用户透明的性能改进。Android 5.0 “Lollipop “是第一个版本,其中ART是唯一包含的运行时。现在,ART所做的事情是带来了在设备上安装时完全被编译的应用程序。因此,性能更高,因为不需要将代码转换为字节码,然后进行编译。但缺点是你需要更多的存储空间和更长的安装时间,因为安装过程中的编译意味着它必须一直在设备上运行。因此,我们没有相对较小的java代码,而是有较大的字节码/机器代码。你可能听说过odexed和de-odexed这两个术语。在这种情况下所做的是,你把应用程序的一小部分,然后预编译,他们可以去做他们的应用程序的一部分优化,以在他们的设备上运行,所以他们现在已经预编译了应用程序的那一部分,其余部分在运行时编译。因此,这使得它比Dalvik的速度和性能更快一些。但这种方法需要更多的存储空间。

例如:三星的TouchWiz … 很多东西,TouchWiz是基于预编译的,因此,当这些东西被去掉odexed时,可以重新设计/重塑它们,同时失去一些性能优势。

在继续阅读之前,请记住,dex2oat是用来优化和编译.dex到.oat文件,其中可能包含ELF格式的机器代码。ART使用设备上的dex2oat工具编译应用程序。这个工具接受DEX文件作为输入,并为目标设备生成一个编译后的应用可执行文件。当一个应用程序被安装时,Android会自动优化应用程序的数据并创建一个相应的OAT文件。OAT文件是由安卓操作系统创建的,以加快安卓应用(.APK文件)的加载时间。安卓系统使用该文件来更快地加载应用程序,创造更好的用户体验。

DVM和ART的区别

DALVIK虚拟机 安卓运行时间
启动时间更快 重启时间明显更长
缓存建立时间长 缓存是在第一次启动时建立的
由于JIT,占用的空间更少 由于AOT,在内部消耗了大量的存储空间
对小型存储设备效果最好 对大型存储设备效果最好
稳定的和经过测试的虚拟机 实验性的和新的—相对而言,没有太多的应用支持
较长的应用加载时间 极其快速和平稳 更快的应用加载时间和更低的处理器使用量
使用JIT编译器(JIT: Just-In-Time) 从而导致更低的存储空间消耗 使用AOT编译器(Ahead-Of-Time),从而在安装时编译应用程序
由于垃圾收集器的暂停和JIT而导致的应用滞后 减少应用滞后和更好的用户体验
应用程序的安装时间相对较短,因为编译是在后期进行的 由于编译是在安装过程中进行的,所以安装时间较长
DVM在每次启动一个特定的应用程序时都会转换字节码。 ART只在应用安装时转换一次。这使得CPU执行更容易。由于执行速度更快,电池寿命得到改善。
它比ART慢。 它的速度更快。
它不能提供优化的电池寿命,因为它消耗更多的电力。 它提供了优化的电池性能,因为它消耗的电力更少。
如果考虑到启动,那么这个设备是快速的。 它在启动方面滞后。

结论: 哪一个更好

这取决于设备和自己的设备和喜好:从长远来看,ART更好,但应用程序确实越来越大,随着时间的推移需要大量的存储空间,不像flappy bird只有1MB,需要更少的空间。因此,如果ART要在未来几年主导市场,未来的设备需要扩大存储空间。在Android Lolipop中,DVM已经被ART取代。因为DVM在你每次启动一个特定的应用程序时都会转换字节码。但ART在安装应用时只转换一次。这使得CPU执行更容易。ARM是一种架构。像MIPS、x86等。DVM/ART运行在ARM之上。两者不能相互替代。