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架构中的位置

最新文章

  1. 学习了quartz.net2.0的心得
  2. NSInvocation的使用(转)
  3. Ubuntu 14.04 64位安装Android Studio 和 genymotion (上)
  4. 一次对象过大引起的gc性能问题的分析与定位
  5. 【算法】哈希表的诞生(Java)
  6. WaitForSingleObject函数
  7. WebService之CXF注解报错(三)
  8. python笔记:#011#循环
  9. DSAPI中TCP、UDP、HTTP的选择
  10. GCC的__attribute__ ((constructor))和__attribute__ ((destructor))
  11. 2017-12-15python全栈9期第二天第三节之作业讲解用户三次登陆
  12. 笔记本centos 取消 关闭盖子自动挂起
  13. IntelliJ+Maven+Spring+Tomcat项目搭建(MAC)
  14. c# 得到list符合某条件的索引值,排序
  15. 关于ThinkPHP的一些编程技巧
  16. ansible wc -l 对结果值取大小的操作
  17. HDU-4471 Yet Another Multiple Problem (BFS+路径还原)
  18. 使用KindEditor完成图片上传(springmvc&fastdfs/springmvc&ftp)
  19. 如何写科技论文How to write a technical paper
  20. Objective-C-----协议protocol,代码块block,分类category

热门文章

  1. 【Robot Framework】robot framework 学习以及selenium、appnium、requests实践(四)
  2. 刻意练习,逃离舒适区——怎么样成为一个高手[罗辑思维]No.183_知识笔记
  3. opecv轮廓匹配,可以用于去噪
  4. oracle 大字段clob检索
  5. python中时间和时区
  6. mysql中explain看性能
  7. call函数心得
  8. 如何解决SWAT模型数据移动目录后出现的“SWAT2005.mdb database specified in your MasterProgress table does not exists. Please correct and try again”的问题
  9. HTML+css实现图片全屏
  10. DedeCMS中function='Html2Text(@me)的用法分析