2014年6月谷歌I/O大会,Android L 改动幅度较大,Google将直接放弃Dalvik虚拟机,代替它的是传闻已久的ART(Android Runtime)。什么是ART?,google为什么弃用Dalvik虚拟机?要想回答这些问题,还需要先了解什么是虚拟机、什么是JVM(java 虚拟机)的概念。
一、什么是虚拟机?
官方语言:虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。
解释:用软件模拟出来的一个计算机系统。这些虚拟机完全就像真正的计算机那样进行工作,例如你可以安装操作系统、安装应用程序、访问网络资源等等
虚拟机分两种:系统虚拟机和进程虚拟机
1,系统虚拟机
解释:提供一个系统的仿真和抽象
平时用的VM Ware,或者VirtualBox 等属于系统虚拟机。能够仿真出一个机器。可在上面跑ubuntu,小红帽的系统
2,进程虚拟机
解释:只提供一个进程的仿真和抽象
我们下面讲得Dalvik,和JVM都是进程虚拟机
例如:Dalvik, JVM(java Virtual Machine),Microsoft.NET
二、什么是JVM(Java虚拟机)
官方语言:JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
解释:其实就是上面讲到的进程虚拟机
我们下看一下jvm的工作流程
java代码用javac编译成bytecode文件,通过虚拟机可以编译成各种平台的汇编语言
所以:虚拟机的好处,write once,compile once,run everywhere
三、什么是Dalvik
官方语言:Dalvik是Google公司自己设计用于Android平台的虚拟机。Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一。它可以支持已转换为 .dex(即Dalvik Executable)格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且[1] 每一个Dalvik 应用作为一个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。
解释:Dalvik是Google专门为Android平台定制的虚拟机。主要是对内存,CPU,电源等模块进行了优化
四、最好解释 ART(Android Runtime)
ART 的机制与 Dalvik 不同。在Dalvik下,应用每次运行的时候,字节码都需要通过即时编译器转换为机器码,这会拖慢应用的运行效率,而在ART 环境中,应用在第一次安装的时候,字节码就会预先编译成机器码,使其成为真正的本地应用。这个过程叫做预编译(AOT,Ahead-Of-Time)。这样的话,应用的启动(首次)和执行都会变得更加快速
解释:ART完全改变了这种做法,在应用安装时就预编译字节码到机器语言,在移除解释代码这一过程后,应用程序执行将更有效率,启动更快。
Dalvik是Google公司自己设计用于Android平台的虚拟机。Dalvik经过优化,使其更适合android平台。具体优点会在下面和JVM进行比较时说明。
四、ART和Dalvik相比优缺点
优点:
1、系统性能的显著提升。
2、应用启动更快、运行更快、体验更流畅、触感反馈更及时。
3、更长的电池续航能力。
4、支持更低的硬件。
缺点:
1.机器码占用的存储空间更大,字节码变为机器码之后,可能会增加10%-20%(不过在应用包中,可执行的代码常常只是一部分。比如最新的 Google+ APK 是 28.3 MB,但是代码只有 6.9 MB。)
2.应用的安装时间会变长。著作权归作者所有。
总的来说,ART 的优点还是远远超越其缺点的。毕竟,影响用户体验的要素中,电池续航和应用顺畅运行更为重要。在于2014 年 10 月 15 日发布的全新 Android 操作系统Android 5.0上,Dalvik彻底被ART取代了!