11月更文挑战|Android基础-Dalvik VM和ART

379 阅读3分钟

这是我参与11月更文挑战的第22天,活动详情查看:2021最后一次更文挑战

Dalvik虚拟机

Dalvik虚拟机(Dalvik Virtual Machine) 简称Dalvik VM或是DVMDalvik虚拟机就是专门为了Android平台开发的,运行在Android运行库中。

DVM和JVM的不同

不同点DVMJVM
架构VM基于寄存器设计,不需要大量指令来支持。指令简洁快捷。可以说是以指令空间大小换时间大小。JVM基于栈设计,读写数据是从栈中获取。因此需要的指令更多,导致速度慢,在移动设备上影响性能。
字节码不同DVM中会有dx工具将.class文件转换为.dex文件。执行顺序:.java->.class->.dexJava SE程序最终编译成.class文件并打包成jar文件。通过.class文件和Jar文件获取对于字节码。执行顺序:.java->.class->.jar
有限内存中支持同时运行多个进程DVM优化支持运行多个进程。Android应用每个都是一个DVM且都是一个独立进程空间。可以做到各个应用之间相互隔离
创建和初始化应用由Zygote负责创建和初始化,创建应用时执行fock。对于只读系统库,所有应用的DVM和Zygote是一起共享的。
共享机制不同应用之间在运行可以共享相同类,拥有高效率。JVM机制不存在共享机制,不同程序运行彼此都是独立的。即使使用同样的类,但都是单独加载和运行无法共享使用。
JIT编译器DVM早期不使用JIT编译器。自从Android2.2版本开始使用JIT编译器JVM使用JIT编译器

DVMJVM的主要区别在于架构不同、执行字节码不同、DVM可在一定内存中同时运行多个进程、DVMZygote创建和初始化、DVM有共享机制、DVM不采用JIT编译器。

ART虚拟机

ART虚拟机(Android Runtime Machine)是Android4.4发布,用于替代Dalvik虚拟机。在Android5.0版本默认都采用ART,也预示着Dalvik虚拟机被淘汰退出历史舞台。

ART和DVM的不同

不同ARTDVM
编译ART系统在安装应用时会进行一次AOT,简称为预编译。将字节码预先编译成机器码并储存到本地。应用运行不需要执行编译,提供运行效率DVM字节码通过JIT编译器转化为机器码,其应用运行效率低。
位数ART支持64位并兼容32位DVM只支持32位
GC机制ART垃圾回收机制有过优化,采用多种垃圾回收方案:Concurrent Mark Sweep、Concurrent Partial Mark Sweep、Concurrent Sticky Mark Sweep、Marksweep + Semispace采用标记清除Mark-Sweep
堆空间划分运行时堆空间划分不同

总结

了解DVMART后可以大概知道为什么会有DVMART以及它们和JVM有哪些不同。在Android开发中为了能在移动硬件设备平台上去运行应用程序,在JVM的基础上做了”阉割“处理后有了DVM使得Android系统能够支持运行Java编写的应用程序。而后为了优化DVM的性能和运行效率,进一步升级完善而诞生出ART。关于Android虚拟机相关知识,这篇文章无法以偏概全只能当做入门基础介绍来讲。DVMART更多深入底层技术和应用在虚拟机中如何运行和加载过程知识需要更多篇幅展开说说。