ART(Android Runtime)和dalvik和jvm的解释和对比

作者: android 发布时间: 2017-07-21 浏览: 946 次 编辑

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取代了!