Android 虚拟机 Davlik

Dalvik虚拟机是Google的用于移动设备的Android平台的一个主要部分。虚拟机可运行Java平台应用程序,这些应用程序被转换成紧凑的Dalvik可执行格式(.dex),该格式适合内存和处理器速度受限的系统。

Dalvik虚拟机的作者是丹伯恩斯坦(Dan Bornstein)。

与 大多数虚拟机和真正的Java虚拟机不同,前者是栈机(stack machine),而Dalvik VM是基于寄存器的架构。就像CISC与RISC的争论,这两种方式的相对优点是一个不断争论的话题,且有时技术界限会变得模糊不清。此外,两种方法的相 对优势取决于所选择的解释/编译策略。但是,总的来说,基于stack的机器必须使用指令来载入stack上的数据,或使用指令来操纵数据,因此与基于寄 存器的机器相比,需要的指令更多。然而,在寄存器的指令必须编码源和目的地寄存器,因此往往指令更大。

一个名为dx的工具,它用于转换 Java的.class文件到.dex格式。多个类文件可包含到单个的.dex文件中。重复的、可用于多个类的字符串和其它常量在转换到.dex格式时输 出到保留空间。Java字节码还可转换成可选择的、Delvik VM使用的指令集。一个未压缩的.dex文件在文件大小方面往往比从同样的.class文件压缩成的.jar文件更小。

当Dalvik可执行文件安装到移动设备时,它们是可以被修改的。为了进一步的优化,在某些数据、简单数据结构和内联的函数库中的字节顺序可以互换,例如空类对象被短路。

为满足低内存要求而不断优化, Dalvik虚拟机有一些独特的、有别于其它标准虚拟机的特征:

(1)虚拟机很小,使用的空间也小;
(2)Dalvik没有JIT编译器;
(3)常量池已被修改为只使用32位的索引,以简化解释器;
(4)它使用自己的字节码,而非Java字节码。

此外, Dalvik被设计来满足可高效运行多种虚拟机实例。

Dalvik虚拟机在Android架构中的位置

时间: 2024-10-21 21:52:20

Android 虚拟机 Davlik的相关文章

android虚拟机

Zygote进程是android所有进程孵化器进程.接收system_server进程发来的命令,fork自身创建一个dalvik虚拟机实例来执行应用程序的入口中函数. fork() 创建一个zygote进程,可fork其它进程: forkAndSpecialize() 创建非zygote进程,不能fork其它进程: forkSystemServer()创建系统服务进程,终止后它的子进程也必须终止. JIT 2.2开始支持,两种字节码编译方式:method ; trace (默认方式) andr

使用HAXM加速Android虚拟机

Android虚拟机在支持Intel VT技术的CPU上,可以使用HAXM(Hardware Accelerated Execution Manager)得到硬件加速支持,使得虚拟机运行速度得到极大提升,速度提升5-10倍. 注意,你必须拥有一颗支持VT的CPU,这个技术是Intel的,所以AMD的CPU估计用不上了.支持VT的CPU具体可以查询http://ark.intel.com/Products/VirtualizationTechnology,一般i5以上的CPU都是没问题的. 想要使

cocos2dx小知识——Android虚拟机调试问题

1.提出问题 遇到过这样的一个问题:我将cocos2dx程序移植到Android项目中去后,想通过Android虚拟机来进行调,但是运行虚拟机后,出现如下错误: Unfortunately, MyTest has stopped. 这是因为:cocos2dx需要OpenGL进行渲染,而Android虚拟机没有这个东西,所以需要启用硬件的渲染器进行渲染,即GPU. 在老版本的Android SDK中,使用AVD创建虚拟机,是有勾选"Use Host GPU"这个选项的. 也就是使用主机的

eclipse,android虚拟机按键不可用解决方法hardware buttons not enabled in avd

用eclipse创建android虚拟机右侧home键盘.返回键等不可用的解决方法:   打开Android Virtual Device Manager,查看虚拟机详情: 打开图片中的Path路径,打开config文件: 把图中所示的参数改为yes保存,重新启动eclipse即可:

Android虚拟机无键盘问题

在使用android模拟器的时候,发现自己创建的AVD启动后没有出现侧边的键盘,在网上搜索后,发现很多人都有这个问题,也有文章说直接使用PC上的键盘,因为有对应的快捷键.但是,没有键盘,始终不爽! Android 虚拟机中与PC键盘对应的按键:http://blog.csdn.net/chenqiai0/article/details/39779687 问题的原因在于自定义AVD时的Skin选项,因为我刚开始用:QVGA所以没有,后来选择WVGA800就有了. VGA:Video Graphic

向Android虚拟机发送短信和拨打电话

Android的emulator是已经包含了gsm 模块,可以模拟电话与短信进行调试(就不用花太多冤枉钱) 首先,肯定是打开虚拟机: emulator -avd XXXXXX -scale 0.8& 这两个参数就不用说了,第一个是avd 名称,第二个是显示大小. 然后使用: telnet localhost <port> port 是虚拟机端口号,一般为5554 (可以使用adb devices 查看) 完整的写法是:telnet localhost 5554. 这时,我们就进入了An

Unity3d发布apk文件并在Android虚拟机中运行的操作流程

总的流程分为以下6个步骤: 1.安装java_jdk 2.配置java环境变量 3.更新android的sdk 4.从Unity3d中发布出apk文件 5.创建android虚拟机并运行 6.将apk文件安装到android虚拟机中 (为方便新手,在下面对每个步骤的具体操作及可能遇到的问题详细提一下) 1.安装java_jdk 官网(www.java.com),免费,我安装的文件的名字是jdk-7u10-windows-i586.exe,版本有新旧,你下载到的版本号可能与我不同,不碍事: 2.配

Android 虚拟机安装SD卡

在cmd命令行下,进入platform-tools目录下. 1.创建sdcard mksdcard -l mycard 256M E:\android\myCards\mysdcard.img 这样就在该目录下创建好了一个SD卡的虚拟镜像.其中-l命令行参数表示虚拟磁盘的卷标号. 256M是创建的虚拟sdcard的大小,在9M-1023M之间 2.激活sdcard 命令行输入:emulator -avd Android4.0 -sdcard G:\android\myCards\mysdcard

教你备份自己的genymotion的android虚拟机

好多人都知道有genymotion这个软件,但是每次我们在新的电脑或者公司电脑上使用这个软件的时候,都需要重新登录账号,有时候账号忘了的话, 又需要重新注册,那么能不能把旧的电脑,或者我的电脑中把自己正在使用的虚拟机拷贝过来使用呢? 又或者自己电脑重装了,那么能不能把虚拟机保留下来呢?因为正在使用的虚拟机里面已经有很多正在开发的demo了,如果重新下载安装的话,那么会遇到好多问题,例如有一个arm虚拟插件的问题,如果你的android项目包含了arm的native的libs的话,则需要安装这个插