Android的虚拟机Dalvik 介绍

随着上周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,由于运营商能够在不花费 许可费用的状况下使用和修改它。编译器

相关文章
相关标签/搜索