(1)概念介绍
前文已经介绍了JVM相关的知识,这里重点介绍Android虚拟机。
在Android的体系框架中有一部分叫做Android Runtime,即Android运行时环境,这个环境包括了两个部分,一个是Android的核心类库,还有一个就是Dalvik虚拟机了。
Android之所以开发Dalvik虚拟机而不使用JAVA自带的JVM可能是基于以下两点考虑:
- 版权问题:如果使用JVM就涉及到了版权问题,所以google需要在JVM的基础上做一些改进,创造自己的虚拟机。
- 性能问题:jvm虚拟机对Java开发来说性能已经足够了,但是相对移动平台的特性,比如低内存,低电量等,就显得有些牵强了,所以为了优化虚拟机的工作效率,google开发了android自己的虚拟机。
(2)JVM和Dalvik区别
JAVA虚拟机运行的是JAVA字节码,Dalvik虚拟机运行的是Dalvik字节码
- java虚拟机:JAVA->class文件
- dalvik虚拟机:JAVA->class文件->Dalvik字节码->打包到dex中->DVM通过解释DEX文件来执行这些字节码。
这里的dex文件是安卓系统的可执行文件,可以进一步将dex提取成odex,odex就相当于预读dex,会占用更多内存,但是程序运行速度也会加快。
(3)Dalvik和ART区别
从Android 5.0(version 21)版起,Android Runtime(ART)取代Dalvik成为系统内默认虚拟机。
(1)概念
- Dalvik虚拟机:它可以支持已转换为.dex(即“Dalvik Executable”)格式的Java应用程序的运行。.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。
- ART:Android Runtime (ART) 是一种在Android操作系统上的运行环境,ART能够在第一次安装的时候,把应用程序的字节码转换为机器码。采用了预编译(AOT,Ahead-Of-Time)技术。
(2)区别:
- Dalvik环境下:程序每次运行的时候,字节码都需要通过即时编译器(just in time ,JIT)转换为机器码,这样会导致应用的启动时间变慢。(安装速度更快,字节码比机器码要小)
- ART环境下:程序在第一次安装的时候,字节码就会预编译(Ahead-Of-Time,AOT)成机器码,这样的话,虽然设备和应用的首次启动会变慢,但是以后每次启动执行的时候,都可以直接运行,因此运行效率会提高。
(4)ART的优缺点
(1)优点
- 系统性能的显著提升
- 应用启动更快、运行更快、体验更流畅、触感反馈更及时
- 更长的电池续航能力
- 支持更低的硬件
(2)缺点
- 字节码变为机器码之后,占用的存储空间更大
- 应用的安装时间会变长