Android的虚拟机:Dalvik和Art

Android4.4版本以前是Dalvik虚拟机,4.4版本开始引入ART虚拟机(Android Runtime)。在4.4版本上,两种运行时环境共存,可以相互切换,但是在5.0版本以后,Dalvik虚拟机则被彻底的丢弃,全部采用ART。
总之,一句话总结就是:采用ART预先加载代替用时查找以提升应用的性能。

ART

ART 是一种执行效率更高且更省电的运行机制,执行的是本地机器码,这些本地机器码是从dex字节码转换而来。ART采用的是AOT(Ahead-Of-Time)编译,应用在第一次安装的时候,字节码就会预先编译成机器码存储在本地。在App运行时,ART模式就较Dalvik模式少了解释字节码的过程,所以App的运行效率会有所提高,占用内存也会相应减少。谷哥在5.0以后的Android版本中默认了ART模式启动,就是希望Android能摆脱卡顿这个毛病。


在这里插入图片描述

Dalvik

Dalvik 虚拟机采用的是JIT(Just-In-Time)编译模式,意思为即时编译,我们知道apk被安装到手机中时,对应目录会有dex或odex和apk文件,apk文件存储的是资源文件,而dex或odex(经过优化后的dex文件内部存储class文件)内部存储class文件,每次运行app时虚拟机会将dex文件解释翻译成机器码,这样才算是本地可执行代码,之后被系统运行。

Dalvik虚拟机可以看做是一个Java VM,他负责解释dex文件为机器码,如果我们不做处理的话,每次执行代码,都需要Dalvik将dex代码翻译为微处理器指令,然后交给系统处理,这样效率不高。为了解决这个问题,Google在2.2版本添加了JIT编译器,当App运行时,每当遇到一个新类,JIT编译器就会对这个类进行编译,经过编译后的代码,会被优化成相当精简的原生型指令码(即native code),这样在下次执行到相同逻辑的时候,速度就会更快。


在这里插入图片描述

两者的区别

  • Dalvik每次都要编译再运行,Art只会安装时启动编译

  • Art占用空间比Dalvik大(原生代码占用的存储空间更大),就是用“空间换时间”

  • Art减少编译,减少了CPU使用频率,使用明显改善电池续航

  • Art应用启动更快、运行更快、体验更流畅、触感反馈更及时

ART优缺点

优点

  • 系统性能的显著提升

  • 应用启动更快、运行更快、体验更流畅、触感反馈更及时

  • 更长的电池续航能力

  • 支持更低的硬件

缺点

  • 更大的存储空间占用,可能会增加10%-20%

  • 更长的应用安装时间

附注

  • ART、Dalvik、AOT、JIT四个名称的关系

    • JIT代表运行时编译策略,也可以理解成一种运行时编译器,是为了加快Dalvik虚拟机解释dex速度提出的一种技术方案,来缓存频繁使用的本地机器码

    • ART和Dalvik都算是一种Android运行时环境,或者叫做虚拟机,用来解释dex类型文件。但是ART是安装时解释,Dalvik是运行时解释

    • AOT可以理解为一种编译策略,即运行前编译,ART虚拟机的主要特征就是AOT

  • Android 为什么要使用虚拟机?

    Android 使用虚拟机作为其运行环境是为了运行 APK 文件构成的 Android 应用。它的优点有:

    • 应用代码和核心的操作系统分离。所以即使任意一个程序中包含恶意的代码也不会直接影响系统文件。这使得 Android 操作系统更稳定可靠。

    • 提高了跨平台兼容性或者说平台独立性。这意味着即使某一个应用是在 PC 上编译的,它也可以通过虚拟机在移动平台上执行。

转载自:https://blog.csdn.net/johnwcheung/article/details/102657024

你可能感兴趣的:(Android的虚拟机:Dalvik和Art)