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,由於運營商能夠在不花費 許可費用的狀況下使用和修改它。編譯器

相關文章
相關標籤/搜索