Dalvik VM 架构

java被称为"编写一次,到处运行",jvm的出现,使一切变为了可能.我们到处可以碰到java平台,例如desktop(jse), 服务器(jee), 移动中断(JME).但是为了让JME适应应用程序在不同的设备上运行,变得百变.主要是不同的配置,不同形式,提供不都相同的包.

android因为青睐选择dalvik vm,抛弃了JME和JVM。但google仍然选择java语言作为应用开发的语言,还有一些其他的,并对设备有一定限制的java库。但是这些都不是标准的java,可以算是java平台的一个另行分支。google似乎有意不想让开发者将jvm作为一个广泛语言执行的平台。目前只有这些语言可以在jvm上进行运行, Scala, Groovy, JRuby,Jython 和Clojure. 这些语言不进可以借助jvm的优势,而且可以无缝利用标准的java库和无数的第三方个人和组织开发的库。最近,google开始巧妙的顶撞这种趋势,通过创建非标准的java技术。不仅仅是android,也包括Google Web Toolkit (GWT) 和 Google app engine.  为什么是非标准,我们不在本文中进行描述。因为他们不是移动技术。这种非标准java趋势,也许世可以被人们接受的尤其是在JME的世界。本文尝试去找出原因,google 为什么选择去开发一个自己非标准的VM。当然同时也有商业原因的考虑,本文只对技术问题进行阐述。

Android平台的创建,是为了这个有限的硬件环境(电力,内存,处理能力,存储)而准备的。android操作系统对于设备最小的需求如下:
Feature Minimum Requirement
Chipset: ARM-based
Memory: 128 MB RAM; 256 MB Flash External
Storage: Mini or Micro SD
Primary Display: QVGA TFT LCD or larger, 16-bit color or better
Navigation Keys: 5-way navigation with 5 application keys, power, camera and
volume controls
Camera: 2MP CMOS
USB Standard: mini-B USB interface
Bluetooth: 1.2 or 2.0

现在的功能,职能手机的硬件,已经远远超过了上述的最低需求。但这些需求,说明,android面对的是对于资源有限的硬件设备。 android是一个unix的变种,使用GNU C 编译器。 那我们来总结一下上面的需求,android的运行条件。

1。有限的处理器速度
2。有限的随机访问内存
3。没有交换分区
4。电池
5。多样的设备集
6。应用程序的沙盒运行时

Dalvik VM 设计总览:

由于为了保证应用对于系统的安全性, 性能,和可实现性, 虚拟机是一个明显选择, 应用程序运行在虚拟机的沙盒内. 但是一般虚拟机并不会针对有限的硬件资源进行协调,所以google需要一个更轻便的虚拟机.
每一个android应用程序运行在自己的虚拟机内,是单独的一个进程. 所以android需要虚拟机可以运行多个实例(dalvik). dalvik可以运行dex 格式的, 这种格式针对内存作了优化,可以占用更少的内存. dalvik 是register-based的虚拟机( jvm是stack-based). 如果想要运行java class类,则需要将java编译好的class,转换为dex格式即可. 这个转换工具是dx.
Dalvik 依赖linux 内核,因为linux内核提供了支持多线程,何低级内存管理等功能,这些是dalvik需要的。
由于每个android应用都是单独的进程,所以android不仅可以运行多个dvm,而且需要启动应用程序的时候能够非常快(即启动dvm要求非常快)。

DEX文件格式介绍:

未完。。。

Original article 
http://davidehringer.com/software/android/The_Dalvik_Virtual_Machine.pdf

此篇文章已被阅读2138 次

Add a Comment

邮箱地址不会被公开。 必填项已用*标注