2019独角兽企业重金招聘Python工程师标准>>>

随着上周Google的Android SDK的发布,关于它的API以及在移动电话领域所带来的预期影响这些方面的讨论不胜枚举。不过,其中的一个话题在Java社区是一石激起千层浪,这就是 Android平台的基础——Dalvik虚拟机。

  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,因为运营商可以在不花费 许可费用的情况下使用和修改它。

记录激动时刻,赢取超级大奖!点击链接,和我一起参加“2010:我的世界杯Blog日志”活动!

转载于:https://my.oschina.net/zhijie/blog/5961

Android的虚拟机Dalvik 介绍相关推荐

  1. Dalvik虚拟机简要介绍和学习计划

    出自:http://blog.csdn.net/luoshengyang/article/details/8852432 我们知道,Android应用程序是运行在Dalvik虚拟机里面的,并且每一个应 ...

  2. android -------- java虚拟机和Dalvik虚拟机

    2019独角兽企业重金招聘Python工程师标准>>> java虚拟机 虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的.Java虚拟机有自己完善的硬体 ...

  3. Java虚拟机和Dalvik(android)虚拟机的区别

    首先你必须对java虚拟机中常用的一款有深入的了解,比如Hotspot. 然后你再了解下android系统和Dalvik. Dalvik 与 传统jvm的差别还是很大的,总结来说,我个人把其归纳为三大 ...

  4. dalvik虚拟机简单介绍

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

  5. android art 远程控制,IT之家学院:认识Android中的Dalvik与ART虚拟机

    又是一年高考时啊,在文章开始之前,IT之家先祝各位高考考生金榜题名~ 每到这个时候,小编就会想起自己的高三时光和高考经历,那段时光真是让人难忘.提起高三生活,可能很多同学都会想到桌子上堆得厚厚的书,黑 ...

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

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

  7. android dalvik虚拟机的作用,IT之家学院:认识Android中的Dalvik与ART虚拟机

    又是一年高考时啊,在文章开始之前,IT之家先祝各位高考考生金榜题名~ 每到这个时候,小编就会想起自己的高三时光和高考经历,那段时光真是让人难忘.提起高三生活,可能很多同学都会想到桌子上堆得厚厚的书,黑 ...

  8. 干货满满,Android热修复方案介绍

    摘要:在云栖社区技术直播中,阿里云客户端工程师李亚洲(毕言)从技术原理层面解析和比较了业界几大热修复方案,揭开了Qxxx方案.Instant Run以及阿里Sophix等热修复方案的神秘面纱,帮助大家 ...

  9. android源码树结构介绍

    最近在学习android源码,在这里分享学习过程中总结的一些知识.仅供参考,如有错误,还请指教. 无论是下载源码还是在AndroidXref 上在线阅读源码,我认为首先都要弄明白源码中各个目录下的代码 ...

最新文章

  1. 0基础学好python难不难_零基础学习Python难不难?Python有什么优势?
  2. 史上最全ajax全套讲解
  3. 英语关于计算机的作文600字,有关电脑的作文600字
  4. Knative 基本功能深入剖析:Knative Eventing 之 Sequence 介绍
  5. springboot连接容器内mysql_docker部署springboot项目,连接mysql容器
  6. PMP知识点(五、成本管理)
  7. android后台截屏实现(3)--编译screencap
  8. c++实现解析文件路径
  9. Samba服务器问题汇总
  10. 【DotNetMLLearn】.NET Core人工智能系列-概述
  11. C++ inline 函数简介
  12. [HDOJ4027]Can you answer these queries?(线段树,特殊成段更新,成段查询)
  13. 线性表--链式实现方式
  14. Google 要用 Flutter 一统移动、桌面开发江湖?
  15. linux系统文件查找及管理
  16. 5.携程架构实践 --- 框架中间件
  17. SSH远程登陆配置sshd_config文件详解
  18. python爬取文库,python爬取文库ppt的简单实现
  19. matlab output()函数,matlab 函数y=f(input,output)该如何实现?
  20. 云服务器搭建网站域名要备案吗,域名绑定服务器需要备案吗

热门文章

  1. 使用 Proteus 仿真 STM32
  2. 3、vueJs基础知识03
  3. SpringMVC、Spring、Mybatis框架整合及使用
  4. PHP使用http_build_query()构造URL字符串的方法(可将POST参数组转换拼接成GET请求链接)...
  5. 弹性盒模型----容器属性
  6. 编辑电线标注及图纸上从主电源线上引出多条支路时如何进行线号的编写?
  7. 现在补上个人项目的分析照片
  8. VS2010不能编译.Net3.5项目的解决方法
  9. Log4j2进阶使用(Pattern Layout详细设置)
  10. 确定不进来看看?分享一个插件,让敲代码不再枯燥,activate-power-mode