Android 运行时 (ART ) 是Android 上的应用程序和一些系统服务使用的托管运行时。 ART 及其前身 Dalvik 最初是专门为 Android 项目创建的。 ART 和 Dalvik 是运行 Dex 字节码的兼容运行时,因此为 Dalvik 开发的应用程序在与 ART 一起运行时应该可以工作。
达尔维克
Dalvik 虚拟机或 DVM是一种基于寄存器的虚拟机,由 Dan Bornstein 设计和编写。 Dalvik 虚拟机由 Bornstein 以冰岛 Eyjafjörður 的渔村“Dalvik”命名,他的一些祖先曾居住在那里。 Dalvik 是 Android 操作系统中已停产的进程虚拟机 (VM),用于执行为 Android 编写的应用程序。 Dalvik 字节码格式仍用作分发格式,但在较新的 Android 版本中不再在运行时使用。 Android 本身是一个 Linux 系统,Dalvik 位于它之上。 DVM 将 android 应用程序从Java代码转换为 Linux 系统可以运行的字节码。基本上,在运行时在 JIT 编译器中将纯Java代码编译为字节码以在机器上运行。这可能会导致速度变慢,因为运行时编译尤其是运行时编译非常耗时。因此,制造商和 OEM 有时会将他们的应用程序作为 odexed 推出。有两种类型的文件:
- .dex(Dalvik Executable file)文件是android的编译代码文件。然后将这些 .dex 文件压缩到一个 .apk 文件中。
- .odex文件由 Android 操作系统创建,以节省空间并提高 Android 应用程序的启动速度(.apk 文件)。
dexopt 用于将 DEX 优化为包含优化字节码的 ODEX(优化 DEX)。所以DVM中的整个过程可以总结为:
JAVA source code(.java) –> Bytecode(.dex) –> DVM
DVM 更适合低存储设备。但由于安装后进行编译,所以速度较慢。
艺术
特别是 4.4 版 KitKat 的较新 android 版本,有 ART 作为 DVM 替代品的概念。 ART(Android Run Time) 是 DVM 的继任者,它使用相同的字节码和 .dex 文件(但不是 .odex 文件),继任旨在提高对最终用户透明的性能。 Android 5.0 “Lollipop”是第一个版本,其中 ART 是唯一包含的运行时。现在 ART 所做的事情是带来在设备上安装时完全编译的应用程序。因此,无需将代码转换为字节码然后编译,因此性能更高。但缺点是你需要更多的存储空间和更长的时间来安装,因为在安装过程中进行编译意味着它必须一直存在于设备上。因此,我们有更大的字节码/机器码,而不是相对较小的Java代码。您可能听说过odexed和de-odexed这两个术语。在这种情况下所做的是,您获取应用程序的一小部分,然后对其进行预编译,他们可以继续优化应用程序的一部分以在他们的设备上运行,因此他们现在已经预编译了应用程序的该部分并它的其余部分在运行时编译。所以这使它比 Dalvik 更快,性能更高。但是这种方法需要更多的存储空间。
Ex: Samsung with TouchWiz .. A lot of stuff, TouchWiz is based on is, precompiled and hence when these are de-odexed, you can retheme/reskin them while losing some performance benefits.
在继续阅读之前,请记住 dex2oat 用于优化和编译 .dex 为 .oat 文件,该文件可能包含 ELF 格式的机器代码。 ART 使用设备上的 dex2oat 工具编译应用程序。此实用程序接受 DEX 文件作为输入,并为目标设备生成一个已编译的应用程序可执行文件。安装应用程序时,Android 会自动优化应用程序数据并创建相应的 OAT 文件。 OAT 文件由 Android 操作系统创建,以加快 Android 应用程序(.APK 文件)的加载时间。 Android 使用此文件更快地加载应用程序,从而创造更好的用户体验。
DVM 和 ART 的区别
DALVIK VIRTUAL MACHINE |
ANDROID RUN TIME |
---|---|
Faster Booting time | Rebooting is significantly longer |
Cache builds up overtime | The cache is built during the first boot |
Occupies less space due to JIT | Consumes a lot of storage space internally due to AOT |
Works best for small storage devices | Works best for Large storage devices |
Stable and tested virtual machine | Experimental and new – not much app support comparatively |
Longer app loading time | Extremely Faster and smoother Faster and app loading time and lower processor usage |
Uses JIT compiler(JIT: Just-In-Time) Thereby resulting in lower storage space consumption |
Uses AOT compiler(Ahead-Of-Time) thereby compiling apps when installed |
Application lagging due to garbage collector pauses and JIT | Reduced application lagging and better user experience |
App installation time is comparatively lower as the compilation is performed later | App installation time is longer as compilation is done during installation |
DVM converts bytecode every time you launch a specific app. |
ART converts it just once at the time of app installation. That makes CPU execution easier. Improved battery life due to faster execution. |
什么更好?
这取决于设备和自己的设备和偏好:从长远来看,ART 更好,但应用程序确实会变得更大,随着时间的推移需要更大的存储空间,不像flappy Bird 只有 1MB 并且需要更少的空间。因此,如果ART要在未来几年主导市场,未来的设备需要扩展存储。在 Android Lolipop 中,DVM 已被 ART 取代。因为每次启动特定应用程序时,DVM 都会转换字节码。但是 ART 在应用程序安装期间只转换一次。这使得 CPU 执行更容易。 ARM 是一种架构。像 MIPS、x86 等。 DVM/ART 运行在 ARM 之上。两者都不能互相替代。