Android虚拟机

一、什么是Dalvik虚拟机

Dalvik是Google公司自己设计用于Android平台的Java虚拟机,它是Android平台的重要组成部分,支持dex格式(Dalvik Executable)的Java应用程序的运行。dex格式是专门为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Google对其进行了特定的优化,使得Dalvik具有高效、简洁、节省资源的特点。从Android系统架构图知,Dalvik虚拟机运行在Android的运行时库层。
Dalvik作为面向Linux、为嵌入式操作系统设计的虚拟机,主要负责完成对象生命周期管理、堆栈管理、线程管理、安全和异常管理,以及垃圾回收等。另外,Dalvik早期并没有JIT编译器,直到Android2.2才加入了对JIT的技术支持。

二、Dalvik虚拟机的特点

体积小,占用内存空间小;
专有的DEX可执行文件格式,体积更小,执行速度更快;
常量池采用32位索引值,寻址类方法名,字段名,常量更快;
基于寄存器架构,并拥有一套完整的指令系统;
提供了对象生命周期管理,堆栈管理,线程管理,安全和异常管理以及垃圾回收等重要功能;
所有的Android程序都运行在Android系统进程里,每个进程对应着一个Dalvik虚拟机实例。

三、Dalvik虚拟机和Java虚拟机的区别

Dalvik虚拟机与传统的Java虚拟机有着许多不同点,两者并不兼容,它们显著的不同点主要表现在以下几个方面:
Java虚拟机运行的是Java字节码,Dalvik虚拟机运行的是Dalvik字节码。
Dalvik可执行文件体积小。Android SDK中有一个叫dx的工具负责将Java字节码转换为Dalvik字节码。
Java虚拟机与Dalvik虚拟机架构不同。Java虚拟机基于栈架构,Dalvik虚拟机基于寄存器架构。

四、Dalvik虚拟机的结构
Android虚拟机
一个应用首先经过DX工具将class文件转换成Dalvik虚拟机可以执行的dex文件,然后由类加载器加载原生类和Java类,接着由解释器根据指令集对Dalvik字节码进行解释、执行。最后,根据dvm_arch参数选择编译的目标机体系结构。