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嘗試控制和?;だ醋訨ava 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可以非??斕囟訟ndroid進行更改,而且可以避開Sun對任何JCP更動的否決權——這樣他們也可以為諸如USB和藍牙這樣的組件加入接口,而這些組件在基礎Java ME實現中是不可用的。最后,通過在Apache許可證下授權許可Dalvik的源碼,移動電話運營商更有可能采用Dalvik,因為運營商可以在不花費許可費用的情況下使用和修改它。


上一篇: Android PVPlayer介紹

下一篇: 解決Android開發中配置Eclipse的問題

分享到: 更多
飞禽走兽技巧规律性 澳洲赛车统一开奖吗 pk10一码100期方法 时时彩走势 三公手机棋牌游戏 怎么买排列三赚钱 高频彩计划软件安卓版 今期36码 欢乐二八杠安卓 牌九玩法图解 时时彩调整20分钟一期 重庆时时彩官方开奖 重庆时时开奖结官网 龙虎一般打机器人怎么打 重庆时时现场直播视频 欢乐生肖开奖结果