Dalvik源码分析(一)虚拟机概述

Dalvik是Google公司本身设计用于Android平台的Java虚拟机。Dalvik虚拟机是Google等厂商合做开发的Android移动设备平台的核心组成部分之一。Dalvik 通过优化,容许在有限的内存中同时运行多个虚拟机的实例,而且每个Dalvik 应用做为一个独立的Linux 进程执行。独立的进程能够防止在虚拟机崩溃的时候全部程序都被关闭。 java

 

主要功能: 性能


Dalvik功能图 优化

Dalvik的主要做用是将java SDK 编译的.class文件编译成.dex文件,而后加载须要的类进行解释执行。同时对进程及内存进行管理。 spa

 

Dalvik VM作了大量的优化,包括以下方面: 设计

(1)Dex文件镜像格式采用了内容压缩技术。将多个class中的内容统一归类存储,即将方法、属性、字符串、类型均抽取出来统一存放,这样可使全部重复的内容仅出现一次,经过引用(id)来访问。这种技术比JVM中基于zip的压缩技术更高。虽然压缩后的大小差很少,可是内容压缩无需解压缩,所以能够有效减小程序的启动时间。 进程

(2)用Zygote统一管理VM。Android中全部应用均对应了一个VM,可是这些VM和JVM的使用方式不一样,这些VM共享了应用程序中的系统代码和数据,这就相似OS中的动态Lib管理那样,一样的内容仅被加载一次,而一旦系统数据须要被某个应用修改时,则采用Copy-On-Write技术保证最少的性能开销。 这种技术不会形成Windows中的“Dll Hell”问题,由于系统库均为Dalvik提供,不会存在版本问题。可是随着应用的发展,可能会逐步出现可重用的Lib,那个时候就会有Windows曾经面临的痛苦了。 ip

(3)Register-based VM。这个和JVM这种Stack-based VM有较大的不一样。后者基于堆栈执行程序,虽然每一个指令字较短,可是指令执行时却一般须要加载数据到堆栈,这就带来了更多的内存访问和更多的指令。虽然因为指令字较短,最终的程序文件大小并不比基于寄存器的程序更大。而基于寄存器的VM一般指令字较长,可是操做数一般在寄存器中,这样就提升了执行的速度。 内存

相关文章
相关标签/搜索