Android运行时(ART )是Android上的应用程序和某些系统服务使用的托管运行时。 ART及其前身Dalvik最初是专门为Android项目创建的。 ART和Dalvik是运行Dex字节码的兼容运行时,因此为Dalvik开发的应用程序应在与ART一起运行时运行。
达尔维克
Dalvik虚拟机或DVM是由Dan Bornstein设计和编写的基于寄存器的虚拟机。 Dalvik虚拟机由Bornstein以冰岛Eyjafjörður的渔村“Dalvík”命名,他的一些祖先曾居住于此。 Dalvik是Android操作系统中已停产的进程虚拟机(VM),用于执行为Android编写的应用程序。 Dalvik字节码格式仍然用作分发格式,但在较新的Android版本中不再在运行时使用。 Android本身是一个Linux系统,Dalvik位于其之上。 DVM使用Android应用程序,将其从Java代码转换为Linux系统可以运行的字节码。基本上,普通的Java代码会在JIT编译器中编译为字节码,以便在运行时在计算机上运行。这可能会导致速度降低,因为在运行时(尤其是在运行时)进行编译非常耗时。因此,制造商和OEM有时会淡化其应用程序。有2种文件类型:
- .dex(Dalvik可执行文件)文件是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运行时)是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. |
有什么更好的?
它取决于设备以及自己的Faster和首选项:从长远来看,ART会更好,但应用程序的确会变得更大,随着时间的推移需要更大的存储空间,这不像松散的鸟只有1MB并且需要更少的空间。因此,如果ART将在未来几年内占领市场,则未来的设备需要扩展存储。在Android Lolipop中,DVM已被ART取代。因为DVM每次启动特定应用程序时都会转换字节码。但是ART在应用程序安装期间仅对其进行了一次转换。这使CPU执行更加容易。 ARM是一种体系结构。像MIPS,x86等一样,DVM / ART在ARM之上运行。他们两个不能互相代替。