Dalvik Virtual Machine 是Android平台的基础。
Dalvik和标准Java虚拟机(JVM)之间的首要差别之一,就是Dalvik基于寄存器,而JVM基于栈。选择基于寄存器的方式是因为它对提前优化(ahead-of-time optimization)提供了更好的支持,而这对类似于移动电话这样的受限环境是颇有裨益的。另一份针对基于寄存器虚拟机和基于栈虚拟机更深入的比较分析指出,基于寄存器的虚拟机对于更大的程序来说,在它们编译的时候,花费的时间更短。
Dalvik和Java之间的另外一大区别就是运行环境——Dalvik经过优化,允许 在有限的内存中同时运行多个虚拟机的实例,并且每一个 Dalvik应用作为一个独立的Linux进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。
Android平台架构图:
如图所示:
应用程序包括:主页、联系管理、电话、浏览器、其他;
应用程序框架包括:Activity管理、窗体管理、内容提供者、视图系统、包管理、电话管理、资源管理、位置管理、通知管理。
库包括:表面管理、媒体框架、SQLite、OpenGL(3D开发库)、FreeType(字体引擎)、WebKit(网页浏览器引擎核心库)、SGL(2D图形引擎库)、SSL、libc、Android运行时(又包括核心库和Dalvik虚拟机)。
Linux内核包括:显示驱动、照相机驱动、内存驱动、Binder(IPC)驱动、键盘驱动、Wi-Fi驱动、音频驱动、电源管理。
作为Java开发者,最关系的可能是Android运行库(Android Runtime),它包括两部分:核心库和Dalvik虚拟机:
1.Android包括一组核心库(core libraries),他提供了 Java 编程语言的核心库中大多数可用功能。
2.每个 Android 应用程序运行在自己的进程上,有自己的 Dalvik 虚拟机实例。 Dalvik这样是为了使一个设备可以有效地运行多个虚拟机。 Dalvik VM 以被优化占用最小内存的Dalvik Executable (.dex)格式执行文件。VM 是基于寄存器的,并通过一个 Java 语言编译器的编译来运行,而这个Java编译器已经被内置的"dx"工具转成.dex 格式(DVM依赖LInux内核)。
3.Dalvik MicrosoftVM 依赖 Linux 内核获得基本功能,如线程处理和底层内存管理。
Android亦包含常见移动平台的关键性能,它已拥有一个良好的堆栈,包括蓝牙、EDGE, 3G和WiFi。在UI方面,支持OpenGL ES提供3D和类似于iPhone的界面管理(surface management)。