Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 中級開發 >> Android面試之---Android的虛擬機Dalvik 介紹

Android面試之---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,因為運營商可以在不花費許可費用的情況下使用和修改它。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved