Java
JVM
Android
概览
Dalvik
Google自己设计用于Android平台虚拟机,可运行已转.dex
格式Java应用程序。.dex
格式专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限系统。Dalvik经优化允有限内存同运多虚拟机实例且每一Dalvik应用作一独立Linux进程执行避虚拟机崩溃关所有程序。长时间以来,Dalvik虚拟机一直被用户诟病为拖慢安卓系统运行速度根源。2014年6月25日,Android L正式亮相谷歌I/O大会,改幅较大,删Dalvik用ART代替。
ART
Android Runtime。与Dalvik不同,Dalvik环境应用每运行时字节码都需通即时编译器(JIT,just in time)转机器码,拖慢应用运行效率。ART环境应用头次装时字节码预先通预编译(AOT,Ahead-Of-Time)编译成机器码,成为真正本地应用。
- 优点
- 显提系统性能
- 应用启动更快、运行更快、体验更流畅、触感反馈更及时
- 提电池续航能力
- 支持更低硬件
- 缺点
- 机器码占存储空间更大。字节码变机器码后或增10%-20%
- 应用装时变长
区别
- Dalvik基于寄存器,JVM基于栈
- Dalvik运行dex文件,JVM运行Java字节码
Android 2.2始Dalvik支持JIT(JIT,just in time 即时编译)。优化后Dalvik较其它标准虚拟机一些不同特性:
- 占更少空间
- 简化翻译。常量池仅用32位索引
- 标准Java字节码实行8位堆栈指令,Dalvik用16位指令集直作用于局部变量。局部变量通来自4位
虚拟寄存器
区,减少Dalvik指令计数,提翻译速度。
Android启时Dalvik VM监视所有程序且创依存关系树,为每程序优化代码并存Dalvik缓存。Dalvik头次加载(很慢)生Cache文件以便下次快速加载。Dalvik解释器用预先算好Goto地址,每指令对内存访都于64字节边界上对齐。这样可节省一指令后查表的时间。Dalvik还提快速翻译器(Fast Interpreter)以强化功能。