Dalvik概述

本文介绍了Dalvik虚拟机的基本概念及其与Java虚拟机的主要区别。Dalvik是Android平台上的Java虚拟机,支持.dex格式的Java应用程序。文章还讨论了Dalvik虚拟机基于寄存器的特点以及DVM进程的设计规则。
Dalvik概述


Dalvik是Google公司自己设计用于Android平台的Java虚拟机。它可以支持已转换为.dex(即Dalvik Executable)格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,可以减少整体文件尺寸,提高I/o操作的类查找速度所以适合内存和处理器速度有限的系统。


Dalvik虚拟机(DVM) 和Java 虚拟机(JVM)首要差别


Dalvik 基于寄存器,而JVM 基于栈。性能有很大的提升。基于寄存器的虚拟机对于更大的程序来说,在它们编译的时候,花费的时间更短。


 


 


寄存器的概念


寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC),在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。


栈的概念


栈是线程独有的,保存其运行状态和局部自动变量的(所以多线程中局部变量都是相互独立的,不同于类变量)。栈在线程开始的时候初始化(线程的Start方法,初始化分配栈),每个线程的栈互相独立。每个函数都有自己的栈,栈被用来在函数之间传递参数。操作系统在切换线程的时候会自动的切换栈,就是切换SS/ESP寄存器。栈空间不需要在高级语言里面显式的分配和释放。


DVM进程的设计规则   


1)每个应用程序都运行在它自己的Linux空间。在需要执行该应用程序时Android将启动该进程,当不再需要该应用程序,并且系统资源分配不够时,则系统终止该进程。


2)每个应用程序都有自己的(DVM),所以任一应用程序的代码与其他应用程序的代码是相互隔离的。


3)默认情况下,每个应用程序都给分配一个唯一的Linux用户ID。所以应用程序的文件只能对该应用程序可见。


所以说每个应用程序都拥有一个独立的DVM,而每个DVM在Linux中又是一个进程,所以说DVM进程和Linux进程可以说是一个概念。


Android 应用程序的编译


Android所有类都通过JAVA编译器编译,然后通过Android SDK的“dex文件转换工具”转换为“dex”的字节文件,再由DVM载入执行。

### Android Dalvik虚拟机介绍 Dalvik虚拟机是在Android平台上用于执行应用程序的关键组件之一[^1]。自2007年起,随着Google发布的Android SDK一同亮相,该虚拟机得名于冰岛的一个小渔村——达利维克(Dalvik),这个名字不仅赋予了技术产品一份特别的文化色彩,也象征着它背后的设计理念。 #### 特点概述 - **专有文件格式**:Dalvik采用了.dex作为其特有的可执行文件格式,相较于传统的.class文件,在压缩率上表现更为出色,从而使得安装包体积显著减小。 - **高效指令集架构**:为了适应移动设备资源有限的特点,Dalvik引入了一套全新的基于寄存器的指令系统,并且支持32位索引的常量池机制,这有助于提高代码解析效率以及减少内存占用。 - **进程隔离模型**:每一个启动的应用都会创建独立的操作系统级线程来承载对应的Dalvik实例,确保不同应用间互不干扰的同时实现了良好的安全性和稳定性保障。 ```java // 示例展示如何定义类成员变量在Dex中的表示形式 Lcom/example/myapp/MainActivity;->myStringField:Ljava/lang/String; ``` #### 运作方式 当用户打开某个APP时,APK内部经过预编译处理过的字节码会被加载到相应的进程中去解释执行;与此同时,JIT(Just-In-Time Compiler)即时编译技术会动态地将频繁使用的部分转换成机器语言以加速响应时间并降低功耗开销。 不过值得注意的是,随着时间推移和技术进步,从Android 5.0 Lollipop版本开始,默认运行环境已经切换到了ART (Android Runtime), 它继承和发展了许多来自Dalvik的优点,同时带来了诸如AOT(Ahead-of-time compilation提前编译)等一系列改进特性,进一步提升了整体性能体验[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值