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

Dalvik是Google公司自己设计用于Android平台的Java虚拟机。Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一。Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik 应用作为一个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。

 

主要功能:


Dalvik功能图

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

 

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曾经面临的痛苦了。

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

 

转载于:https://my.oschina.net/u/574972/blog/95726

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值