对Dalvik虚拟机核心部分解读分析

移动开发 Android
Dalvik虚拟机非常适合在移动终端上使用,相对于在桌面系统和服务器系统运行的虚拟机而言,它不需要很快的CPU速度和大量的内存空间。

Dalvik虚拟机经过优化,允许在有限的内存中同时运行多个虚拟机的实例,据了解官方所说的Dalvik的出现是未来扩展JME,这样也可以做到Android不是google自己七拼八凑的。

根据 Google的测算,64M的RAM已经能够令系统正常运转了。其中24M被用于底层系统的初始化和启动,另外20M被用于高层启动高层服务。当然,随着系统服务的增多和应用功能的扩展,其所消耗的内存也势必越来越大。

归纳起来,Dalvik虚拟机有如下几个主要特征:专有的DEX文件格式DEX是Dalvik虚拟机专用的文件格式,而为什么弃用已有的字节码文件(CLASS文件)而采用新的格式呢?

1.一个应用中会定义很多类,编译完成后即会有很多相应的CLASS文件,CLASS文件间会有不少冗余的信息;而DEX文件格式会把所有的CLASS文件内容整合到一个文件中。这样,除了减少整体的文件尺寸,I/O操作,也提高了类的查找速度。

原来每个类文件中的常量池,在DEX文件中由一个常量池来管理,具体方式如下图:

常量池来管理

2.增加了新的操作码的支持

3.文件结构尽量简洁,使用等长的指令,借以提高解析速度

4. 尽量扩大只读结构的大小,借以提高跨进程的数据共享

如何生成DEX文件呢?Android系统和Dalvik虚拟机提供了工具(DX),在把Java源代码编译成CLASS文件后,使用DX工具。DEX文件的结构是紧凑的,然而如果我们还想要求运行时的性能有进一步提高,我们就仍然需要对DEX文件进行进一步优化。优化主要是针对以下几个方面:

调整所有字段的字节序(LITTLE_ENDIAN)和对齐结构中的每一个域 验证DEX文件中的所有类 对一些特定的类进行优化,对方法里的操作码进行优化 优化后的文件大小会有所增加,应该是原DEX文件的1-4倍。

优化发生的时机有两个:对于预置应用,可以在系统编译后,生成优化文件,以ODEX结尾。这样在发布时除APK文件(不包含DEX)以外。还有一个相应的 ODEX文件;对于非预置应用,包含在APK文件里的DEX文件会在运行时被优化,优化后的文件将被保存在缓存中。

基于寄存器相对于基于堆栈的虚拟机实现,基于寄存器的虚拟机实现虽然在硬件通用性上要差一些,但是它在代码的执行效率上却更胜一筹。一般来讲,虚拟机中指令的解释执行时间主要花在以下三个方面。

【编辑推荐】

  1. Android应用程序组建原理深入剖析
  2. Android SMS短信服务相关概念简述
  3. PythonAndroid数据库相关代码解读
  4. PythonAndroid安装卸载程序具体操作方法解析
  5. Android应用程序的四个关键点
责任编辑:chenqingxiang 来源: 51CTO.com
相关推荐

2010-02-06 17:32:43

Dalvik虚拟机

2010-02-04 10:05:28

Dalvik虚拟机

2010-02-06 17:54:40

Dalvik虚拟机

2013-11-11 15:31:32

虚拟机Android Run

2023-02-20 14:24:56

AndroidDalvikART

2021-01-26 09:30:32

加密虚拟机攻击

2010-08-02 09:38:43

jQuery

2010-02-06 17:36:58

Dalvik虚拟机

2010-02-05 13:44:36

Dalvik虚拟机

2017-03-01 20:08:36

PHP内核分析

2009-06-12 16:15:42

死锁Java虚拟机

2012-05-18 10:22:23

2012-08-16 09:07:57

Erlang

2010-07-26 09:02:38

2013-07-17 09:32:58

2024-02-28 11:33:01

云服务开发

2018-09-11 14:24:34

Java虚拟机优化

2009-08-18 21:57:59

2017-09-14 10:11:24

OpenStack虚拟机过程分析

2024-03-13 08:03:02

点赞
收藏

51CTO技术栈公众号