从Android5.0开始废弃了Dalvik,全面推行ART。
Dalvik与ART的区别
(1)在Dalvik下,应用每次运行都需要通过即时编译器(JIT)将字节码转换为机器码,即每次都要编译加运行,这虽然会使安装过程比较快,但是会拖慢应用以后每次启动的效率。而在ART 环境中,应用在第一次安装的时候,字节码就会预编译(AOT)成机器码,这样的话,虽然设备和应用的首次启动(安装慢了)会变慢,但是以后每次启动执行的时候,都可以直接运行,因此运行效率会提高。
(2)ART占用空间比Dalvik大(字节码变为机器码之后,可能会增加10%-20%),这也是著名的“空间换时间大法"。
(3)预编译也可以明显改善电池续航,因为应用程序每次运行时不用重复编译了,从而减少了 CPU 的使用频率,降低了能耗。
ART优点:
1. 系统性能的显著提升
2. 应用启动更快、运行更快、体验更流畅、触感反馈更及时
3. 更长的电池续航能力
4. 支持更低的硬件
ART缺点:
1. 更大的存储空间占用,可能会增加10%-20%
2. 更长的应用安装时间
JVM是Java Virtual Machine,而DVM就是Dalvik Virtual Machine,是安卓中使用的虚拟机,所有安卓程序都运行在安卓系统进程里,每个进程对应着一个Dalvik虚拟机实例。他们都提供了对象生命周期管理、堆栈管理、线程管理、安全和异常管理以及垃圾回收等重要功能,各自拥有一套完整的指令系统,以下简要对比两种虚拟机的不同。
①JAVA虚拟机运行的是JAVA字节码,Dalvik虚拟机运行的是Dalvik字节码
JAVA程序经过编译,生成JAVA字节码保存在class文件中,JVM通过解码class文件中的内容来运行程序。而DVM运行的是Dalvik字节码,所有的Dalvik字节码由JAVA字节码转换而来,并被打包到一个DEX(Dalvik Executable)可执行文件中,DVM通过解释DEX文件来执行这些字节码。
②Dalvik可执行文件体积更小
以下是JVM规范中以C的数据结构表达的class文件结构,class文件被虚拟机加载到内存中后便是这样
Linux对硬件的可移植性很好,Java对平台的移植性很好
一.什么是虚拟机
百度百科中解释:虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。
其实简单解释就是虚拟出来的一套拥有相当于实际计算机功能的系统,相信搞it的大家,在学生时代就没少在自己计算机装过各种系统的虚拟机,比如没有苹果电脑,又想玩玩苹果洗用、又不想把window系统换成苹果系统,怎么办呢,在window上安装个虚拟机,虚拟机上装mac系统,搞定
二.什么是jvm
java虚拟机(Java Virtual Machine)简称jvm,是运行所有java程序的抽象计算机,是java的运行环境,Java虚拟机使java语言可以跨平台运行。Java语言编译生成在Java虚拟机上运行的字节码,Java虚拟机在执行字节码时把字节码解释成具体平台上的机器指令执行。
三.什么是Dalvik
Dalvik是google设计的用于android平台的虚拟机,是Android中运行java的基础,其指令是基于寄存器的,运行的是经过转换的.dex文件(.dex是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统),Dalvik虚拟机每次应用运行的时候,将代码编译成机器语言执行。
四.什么是ART
android5.0之后使用ART虚拟机代替了Dalvik,ART虚拟机采用AOT(Ahead-Of-Time)技术,在应用安装时就把代码转换成机器语言,在程序运行时不再进行转换,从而优化了应用的运行速度。
五.jvm和Dalvik区别:
1.jvm基于栈,Dalvik是基于寄存器的。
JAVA虚拟机基于栈结构,程序在运行时虚拟机需要频繁的从栈上读取写入数据,这个过程需要更多的指令分派与内存访问次数,会耗费很多CPU时间。
Dalvik虚拟机基于寄存器架构,数据的访问通过寄存器间直接传递,这样的访问方式比基于栈方式要快很多。
2.jvm运行的是java字节码,Dalvik运行的是专有的文件格式.dex(dex可以减少整体文件大小,提高I/o操作的类查找速度)
六.Dalvik和ART的区别:
Dalvik在每次应用运行时将代码编译成机器码执行,ART在应用安装时就将代码全部转换成机器码,在应用运行时不再进行转换。
ART优点:程序运行速度更快
缺点:安装时占用空间大、安装速度慢