这一阵子研究一下虚拟机,和大家分享一下心得,如果大家有什么好的想法,也请分享一下。
Google在2007年底正式发布Android SDK,Dalvik虚拟机也一样出现在人们的视野当中。它的名字来源于作者丹▪伯恩斯坦(Dan Bornstein)的祖父曾经居住过的Dalvik的小渔村。Dalvik是Google公司自己设计用于Android平台的Java虚拟机,它是Android平台的重要组成部分,支持dex格式(Dalvik Executable)的Java应用程序的运行。dex格式是专门为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Google对其进行了特定的优化,使得Dalvik具有高效、简洁、节省资源的特点。从Android系统架构图知,Dalvik虚拟机运行在Android的运行时库层。
Dalvik虚拟机作为Android平台的核心组件,拥有一下几个特点:
1.体积小,占用内存空间小
2.专有的DEX可执行文件格式,体积更小,执行速度更快。
3.常量池采用32位索引值,寻址类方法名、字段名、常量更快。
4.基于寄存器架构,有一套完整的指令系统。
5.提供了对象生命周期管理、堆栈管理、线程管理、安全和异常管理以及垃圾回收等重要功能。
6.所有的Android程序都运行在Android系统进程里,每个进程对应着一个Dalvik虚拟机实例。
Dalvik作为面向Linux、为嵌入式操作系统设计的虚拟机。Dalvik充分利用Linux进程管理的特定,对其进行了面向对象的设计,使得可以同时运行多个进程,而传统的Java程序通常只能运行一个进程,这也是为什么Android不采用JVM的原因。Dalvik为了达到优化的目的,底层的操作大多和系统内核相关,或者直接调用内核接口。另外,Dalvik早期并没有JIT编译器,直到Android2.2才加入了对JIT的技术支持。