ART | 青训营笔记

190 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第13天
对 ART 的相关概念进行一些了解

ART

背景

   ~~~ Android系统是以Linux系统为底层构建的,开源的Android系统需要配置到不同硬件配置的设备上,为了降低应用的开发难度,在Linux底层之上构筑了一个名为"Dalvik"的虚拟机,名为虚拟机,实际是一种应用编译模式,Android4.4开始引入的ART模式是一种全新的应用编译模式,Android5.0彻底从Dalvik转换到ART。
   ~~~ ART模式英文全称为:Android runtime,是谷歌[Android 4.4]系统新增的一种应用运行模式,与传统的[Dalvik]模式不同,ART模式可以实现更为流畅的安卓系统体验(只有在安卓4.4以上系统中采用此功能)。
   ~~~ Android4.4版本以前是Dalvik虚拟机,4.4版本开始引入ART虚拟机(Android Runtime)。在4.4版本上,两种运行时环境共存,可以相互切换,但是在5.0版本以后,Dalvik虚拟机则被彻底的丢弃,全部采用ART。

ART 模式

   ~~~ ART ,给APP和system server进程提供运行环境,包括JAVA语法支持,托管,性能优化,debug等等一系列的能力。 image.png

   ~~~ 可划分为两个层级:执行层和 runtime 层,执行层负责直接面向java代码的产物,来翻译或者编译执行;runtime层则是提供java语法特性和其他一些支撑运行的底层机制。

image.png

Dalvik模式

Dalvik是Google公司自己设计用于Android平台的Java虚拟机,Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一,它可以支持已转换为.dex格式的java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。每一个Dalvik应用作为一个独立的Linux进程执行,在有限的内存中允许同时运行多个虚拟机的实例。独立的进程可以防止在虚拟机崩溃时所有程序都被关闭。

因为 Dalvik 虚拟机,Android 开发者只需按照谷歌提供的 SDK 即可轻松创建 APP,不需要顾忌硬件、底层驱动等问题,在每次执行应用时,Dalvik虚拟机都会将程序的语言由高级语言编译为机器语言,Dalvik依靠一个 Just-In-Time(JIT) 编译器去解释字节码,每次运行程序都需要做上述操作,将字节码编译为机器语言;所以很长时间以来,Dalvik 虚拟机一直被用户指责为拖慢安卓系统运行速度不如 IOS 的根源。

对比

  • Dalvik 每次都要编译再运行,Art 只会安装时启动编译
  • ART 占用空间比 Dalvik 大(原生代码占用的存储空间更大),就是用“空间换时间”
  • ART 减少编译,减少了 CPU 使用频率,使用明显改善电池续航
  • ART 应用启动更快、运行更快、体验更流畅、触感反馈更及时

ART模式与Dalvik模式最大的不同在于,在启用ART模式后,系统在安装应用的时候会进行一次预编译,在安装应用程序时会先将代码转换为机器语言存储在本地,这样在运行程序时就不会每次都进行一次编译了,执行效率也大大提升。