Dalvik VM 和 JVM 的比较
Dalvik 虚拟机是 Google 公司自主设计的运行于 Android 平台的 Java 虚拟机。 JVM 是归 Oracle 公司所有的,运行在基于 PC 机上的 Window 和 Linux 操作系上的 java 虚拟机。 Google 工程师之所以设计 Dalvik 虚拟机主要有以下两点原因:若要使用 JVM 需要获得授权许可,这意味着需要缴纳大量的费用; JVM 主要是针对于 CPU 快,内存大的传统 PC 机,不适合移动设备。
jvm 编译后文件格式 .java->.class->.jar
dalvikvm 编译后文件格式 .java->.class->.dex->.apk
通过对比上面我们可以得出如下几点区别:
(1 )Java 虚拟机运行java 字节码,Dalvik 虚拟机运行其专有的文件格式.dex 。
(2 )Dalvik 基于寄存器,而JVM 基于栈。基于寄存器的虚拟机对于编译之后变大的程序来说,在它们执行时候,花费的时间更短。
Android的新虚拟机ART(4.4 测试版本 5.0正式版)
随着Android操作系统的成熟,Google的Android团队开始将注意力转向一些底层组件,其中之一是负责应用程序运行的Dalvik运行时。Google开发者已经花了两年时间开发更快执行效率更高更省电的替代ART运行时。 ART代表Android Runtime,其处理应用程序执行的方式完全不同于Dalvik,Dalvik是依靠一个Just-In-Time (JIT)编译器去解释字节码。开发者编译后的应用代码需要通过一个解释器在用户的设备上运行,这一机制并不高效,但让应用能更容易在不同硬件和架构上运行。ART则完全改变了这套做法,在应用安装时就预编译字节码到机器语言,这一机制叫Ahead-Of-Time (AOT)编译。在移除解释代码这一过程后,应用程序执行将更有效率,启动更快。
ART优点:
1) 系统性能的显著提升。
2) 应用启动更快、运行更快、体验更流畅、触感反馈更及时。
3) 更长的电池续航能力。
4) 支持更低的硬件。
ART缺点:
1) 更大的存储空间占用,可能会增加10%-20%。
2) 更长的应用安装时间。
Dalvik VM 和 ART
Dalvik:应用每次运行的时候,字节码都需要通过即时编译器转换为机器码,这会拖慢应用的运行效率。
java-->java bytecode(.jar)-->dalvik bytecode(.dex)-->optimized dalvik bytecode(.odex)
这里的.odex如同其名,本质依然是dalvik字节码。
ART:应用在第一次安装的时候,字节码就会预先编译成机器码,使其成为真正的本地应用,应用的启动和执行速度都会显著提升。
java-->java bytecode(.jar)-->dalvik bytecode(.dex)-->optimized android runtime machine code(.odex)
ART的编译器(LLVM)会把dalvik字节码编译成oat格式的机器码,并封装为elf文件。
使用.odex扩展名应是为了保持libart与libdvm互相替换时的一致性,对应两者的可执行代码使用同一个文件名。