Dalvik与ART的介绍及区别(一)

一、Dalvik

  Dalvik虚拟机,它可以支持已转换为.dex(即“Dalvik Executable”)格式的Java应用程序的运行。.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Dalvik由Dan Bornstein编写的,名字来源于他的祖先曾经居住过的小渔村达尔维克(Dalvík),位于冰岛Eyjafjörður。

  大多数虚拟机包括JVM都是一种堆栈机器,而Dalvik虚拟机则是寄存器机。两种架构各有优劣,一般而言,基于堆栈的机器需要更多指令,而基于寄存器的机器指令更长。

二、ART

  Android Runtime(缩写为ART),在2013年作为Android 4.4系统中的一项测试功能正式对外发布,Android 5.0开始作为正式的运行时库取代了以往的Dalvik虚拟机。ART能够把应用程序的字节码转换为机器码,是Android所使用的一种新的虚拟机。而ART采用Ahead-of-time(AOT)技术。改善了性能、垃圾回收(Garbage Collection)、应用程序除错以及性能分析。

三、JIT

  JIT是”Just In Time Compiler”的缩写,就是”即时编译技术”,与Dalvik虚拟机相关。JIT最早在Android 2.2系统中引进到Dalvik虚拟机中,在应用程序启动时,JIT通过进行连续的性能分析来优化程序代码的执行,在程序运行的过程中,Dalvik虚拟机在不断的进行将字节码编译成机器码的工作。

四、ART 和 Dalvik 的主要区别

1.ART引入了AOT预编译技术

  在应用程序安装的过程中,ART就已经将所有的字节码重新编译成了机器码。应用程序运行过程中无需进行实时的编译工作,只需要进行直接调用。因此,ART极大的提高了应用程序的运行效率,同时也减少了手机的电量消耗,提高了移动设备的续航能力,在垃圾回收等机制上也有了较大的提升。

2.ART模式下需要消耗更多的时间和储存空间

  为了保证向下兼容,ART使用了相同的Dalvik字节码文件(dex),即在应用程序目录下保留了dex文件供旧程序调用,然而.odex文件则替换成了可执行与可链接格式(ELF)可执行文件。一旦一个程序被ART的dex2oat命令编译,那么这个程序将会指通过ELF可执行文件来运行。因此,相对于Dalvik虚拟机模式,ART模式下Android应用程序的安装需要消耗更多的时间,同时也会占用更大的储存空间(指内部储存,用于储存编译后的代码)。

3.ART模式下实时编译时间减少很多

  由于在ART 模式下,应用在第一次安装的时候,字节码就会预先编译成机器码,使其成为真正的本地应用。之后打开App的时候,不需要额外的翻译工作,直接使用本地机器码运行,因此运行速度提高。虽然首次安装时间和应用存储空间占用会更多,但是和更流畅的应用体验来比,则不值得一提了。

猜你喜欢

转载自blog.csdn.net/qq_22393017/article/details/73336238