Dalvik和标准Java虚拟机(JVM)之间的首要差别之一,就是Dalvik基于寄存器,而JVM基于栈。一直以来都有人在猜测,选择基于寄存器的方式是因为它对提前优化(ahead-of-time optimization)提供了更好的支持,而这对类似于移动电话这样的受限环境是颇有裨益的。另一份针对基于寄存器虚拟机和基于栈虚拟机更深入的比较分析指出,基于寄存器的虚拟机对于更大的程序来说,在它们编译的时候,花费的时间更短。

  Dalvik和Java之间的另外一大区别就是运行环境——Dalvik经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个 Dalvik应用作为一个独立的Linux进程执行。Neil Bartlett指出,给每一个应用赋予独立的进程可以允许动态安装、激活和去激活,但是他对Dalvik为什么要选择这种方式而没有使用OSGi在单一进程中实现表示疑问——Radoslav Gerganov回复说,独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。Carl Rosenberger也指出OSGi也可以被移植到Android平台,而Jilles van Gurp对Google为何选择重新实现若干组件,如跨进程通信,表示疑问。

  此外,Java也已经不再是人们在Dalvik上开发所选择的唯一语言了——已经有人在Dalvik上运行Scala取得了成功,并且Hecl也已经被成功移植了。另外更有人对运行Groovy做了一次尝试,不过目前为止还不怎么成功。Mono项目的创始人Miguel de Icaza也对在Dalvik源码公开之后将Mono整合到Dalvik上表示了兴趣,而且也已经有人猜测如何用多种方式来实现整合了,包括与随Android SDK提供的Java到Dalvik重编译器类似的CIL(Common Intermediate Language,通用中间语言)到Dalvik重编译器。

  Dalvik的诞生也导致人们开始忧虑Java平台的第一次大规模的分道扬镳或许已经是进行时了——有人已经把Davlik和微软的JVM以及Sun 对微软的诉讼联系起来,等着看Google身上是否也会发生类似事情;另外一些人则指出,Google并没有宣称Dalvik是一个Java实现,而微软却是这样做的。Sun也对可能带来的阵营分裂表达了忧虑情绪,并提出和Google合作来保证Dalvik和JVM之间的兼容性——Google对此的解释是,Dalvik是对解决目前Java ME平台上分裂的一次尝试,也是为了提供一个拥有较少限制许可证的平台。甚至还有人怀疑这是否是Sun和Google两大阵营对Java之未来的一次大规模较量。Ian Skerret认为,Dalvik的诞生是对Sun尝试控制和保护来自Java ME收入来源的一次反应,以及对建立OpenJDK统辖理事会迟迟未果的回答。这也导致Dalibor Topic怀疑Google是否要重履Sun走过的路:

  当然,一个很有意思的问题是,为什么没人有勇气拿Google关于OpenJDK的问题反过来问Google呢?

  虽然Android号称开源,但它仍是专有产品。Android做过兼容性保证,是在秘密会议室中签署和保管的。Android不具备任何治理模型,也没有证据指出将来会出现治理模型。Android没有规范,并且它的许可证禁止任何替代实现的开发,因为这并非Google在SDK许可证中授权许可的使用权。Android完全在Google的掌控之下,一旦有竞争性应用在财政上损害了Google的利益,Google是保有一刀抹杀这些应用的权利的。从设计伊始,Android就收到限制,只能在Google的财务利益允许的条件内开放。专有的Java也不是什么好货色,旧瓶装新酒而已。

  这就好像我们在见证JCP的重生一样,人们排着队把开源社区的“街头信誉”在一个单一的、专有的实现的基础上借给另外一个封闭的厂商垄断集团。只不过这次的大头改姓Google,而不是Sun了。
Stefano Mazzocchi发布了一篇分析报告,深切入里地探讨了围绕Java ME和Dalvik的许可证问题,他得出结论说,Dalvik的市场定位良好,足以给移动电话市场带来冲击。尽管Google一直都很小心避免引起诉讼的几个关键点,但Mazzocchi相信Sun还是会起草知识产权案的状告书(IBM也有可能)。他还指出,由于在JCP之外操作,Google可以非常快地对Android进行更改,而且可以避开Sun对任何JCP更动的否决权——这样他们也可以为诸如USB和蓝牙这样的组件加入接口,而这些组件在基础Java ME实现中是不可用的。最后,通过在Apache许可证下授权许可Dalvik的源码,移动电话运营商更有可能采用Dalvik,因为运营商可以在不花费许可费用的情况下使用和修改它。

来自

http://www.eoeandroid.com/forum.php?mod=viewthread&tid=118268&fromuid=810363

Android虚拟机Dalvik介绍相关推荐

  1. 5分钟了解Android虚拟机Dalvik和ART,让手机告别卡顿!

    Android虚拟机 一.Dalvik虚拟机 1.DVM与JVM的主要区别 1)架构不同 2)执行字节码不同 3)DVM的预加载-共享机制 2.DVM的运行时堆 1)Zygote Space 2)Ca ...

  2. Android的虚拟机Dalvik 介绍

    2019独角兽企业重金招聘Python工程师标准>>> 随着上周Google的Android SDK的发布,关于它的API以及在移动电话领域所带来的预期影响这些方面的讨论不胜枚举.不 ...

  3. Android虚拟机-Dalvik VM架构

    Dalvik, VM会监视所有的程序APK,并且创建依赖关系熟,为每个程序优化代码并存储在Dalvik缓存中.Dalvik VM第一次加载后会生成Cache文件,加速加载,Dalvik Vm的第一次加 ...

  4. Android的Dalvik虚拟机的一个小BUG

    今日看一练习题,想运行一下验证个结果 原题 int i=2; i=i++; int j=i++; System.out.println(i+"===onTouchEvent===" ...

  5. dalvik虚拟机简单介绍

    首先,让我们来思考下面几个问题: 什么是Dalvik虚拟机? Dalvik VM与JVM有什么区别? Dalvik VM有什么新的特点? Dalvik VM的架构是怎么样的? 首先,我得承认第一个问题 ...

  6. DMMS工具介绍-更改Android虚拟机默认安装位置

    Android virtual devices  Manager工具 画红线部分为Android 虚拟机路径,其中不能包含中文路径,否则将导致虚拟机可能无法正常启动. 更改默认安装路径: 1.复制An ...

  7. Android面试收集录13 Android虚拟机及编译过程

    一.什么是Dalvik虚拟机 Dalvik是Google公司自己设计用于Android平台的Java虚拟机,它是Android平台的重要组成部分,支持dex格式(Dalvik Executable)的 ...

  8. Android系统基础介绍

    Android系统基础介绍 Android系统发展史 Android系统从1.5版本迭代到现在10.0 需要注意的几个版本: 5.0 界面设计技术发生变革,采用全新的MaterialDesign界面, ...

  9. Android工具修复属性,Android 热修复介绍之代码修复

    什么是Android热修复技术 简单来说就是不重新安装apk的情况下,通过补丁,修复bug 正常开发流程 热修复开发流程 目前主流的热修复技术框架 阿里系的: Andfix.Hotfix.Sophix ...

  10. 重学Android基础系列篇(五):Android虚拟机指令

    前言 本系列文章主要是汇总了一下大佬们的技术文章,属于Android基础部分,作为一名合格的安卓开发工程师,咱们肯定要熟练掌握java和android,本期就来说说这些~ [非商业用途,如有侵权,请告 ...

最新文章

  1. android 一个字符串分两行显示_重新梳理Android权限管理
  2. 在操作系统重启后恢复应用程序的工作状态
  3. 关于thymeleaf静态资源找不到的问题
  4. 物以稀为贵-网管狂妄的原因
  5. Apache Lucene Java 全文检索引擎架构
  6. 游戏筑基开发之字符串、字符指针、字符数组的相关知识梳理(C语言)
  7. 深入浅出Linux设备驱动编程--复杂设备驱动
  8. 洞见 | Peter:Web3.0 的宏观架构
  9. openCV实践项目:拖拽虚拟方块
  10. 村医计算机在线考试答案,资讯详情-村医去卫生院换电脑,却被“威胁”停业整顿?-医德帮诊所生态服务平台-为基层诊所赋能...
  11. 利用三轴加速器的计步测算方法
  12. 晚上如何配置ubuntu,保护眼睛?黑(暗)色主题
  13. win10电脑桌面透明便签_DesktopNoteOK桌面便签小工具下载|windows10桌面透明便签插件_最火软件站...
  14. C语言程序设计实现调制解调,安徽省二级C语言程序设计笔试样题4.doc
  15. poj求排列的逆序数
  16. IDC具体是干什么的?
  17. 学习总结-《父与子的编程之旅》chapter 1
  18. IE8:像用Windows一样用浏览器
  19. 大学英语四六级作文模板
  20. 什么是 APT 攻击?

热门文章

  1. java class 文件
  2. 使IE6支持png透明图片
  3. c/c++ int _tmain(int argc, _TCHAR* argv[])
  4. MySQL - 查询今天的数据(以及昨天、本月、上个月、今年...)
  5. 精心收集的 48 个 JavaScript 代码片段,仅需 30 秒就可理解
  6. java XML 通过BeanUtils的population为对象赋值 根据用户选择进行dom4j解析
  7. RHEL6基础三十七之系统时间修正、GRUB背景图片修改
  8. varnish运行机制及管理优化
  9. 如何在Mac上使用“预览”应用抠图?
  10. Recoverit for Mac专业的数据恢复工具