Dalvik 與 ART

來源:互聯網
上載者:User

標籤:android   style   http   os   使用   io   java   strong   ar   

Dalvik
 本詞條缺少資訊列,補充相關內容使詞條更完整,還能快速升級,趕緊來編輯吧!Dalvik是Google公司自己設計用於Android平台的Java虛擬機器。Dalvik虛擬機器是Google等廠商合作開發的Android行動裝置平台的核心組成部分之一。它可以支援已轉換為 .dex(即Dalvik Executable)格式的Java應用程式的運行,.dex格式是專為Dalvik設計的一種壓縮格式,適合記憶體和處理器速度有限的系統。Dalvik 經過最佳化,允許在有限的記憶體中同時運行多個虛擬機器的執行個體,並且[1] 每一個Dalvik 應用作為一個獨立的Linux 進程執行。獨立的進程可以防止在虛擬機器崩潰的時候所有程式都被關閉。很長時間以來,Dalvik虛擬機器一直被使用者指責為拖慢安卓系統運行速度不如IOS的根源。2014年6月25日,Android L 將正式亮相於召開的GoogleI/O大會,Android L 改動幅度較大,Google將直接刪除Dalvik,代替它的是傳聞已久的ART。目錄

1發展與前景

? 前景

2架構

3效能

4類庫

5其他

 1.發展與前景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,因為電訊廠商可以在不花費許可費用的情況下使用和修改它。此外,Java也已經不再是人們在Dalvik上開發所選擇的唯一語言了——已經有人在Dalvik上運行Scala取得了成功,並且Hecl也已經被成功移植了。另外更有人對運行Groovy做了一次嘗試,不過目前為止還不怎麼成功。Mono項目的創始人Miguel de Icaza也對在Dalvik源碼公開之後將Mono整合到Dalvik上表示了興趣,而且也已經有人猜測如何用多種方式來實現整合了,包括與隨Android SDK提供的Java到Dalvik重編譯器類似的CIL(Common Intermediate Language,通用中繼語言)到Dalvik重編譯器。(dx是一套工具,可以將 Java .class 轉換成 .dex 格式. 一個dex檔通常會有多個.class。由於dex有時必須進行最佳化,會使檔案大小增加1-4倍,以ODEX結尾。)Dalvik和標準Java虛擬機器(JVM)首要差別Dalvik 基於寄存器,而 JVM 基於棧。基於寄存器的虛擬機器對於編譯後變大的程式來說,在它們執行的時候,花費的時間更短。(Also of register-based VMs allow faster execution times at the expense of programs which are larger after compilation.)DalvikJava運行環境的區別1:Dalvik主要是完成對象生命週期管理,堆棧管理,線程管理,安全和異常管理,以及記憶體回收等等重要功能。2:Dalvik負責進程隔離和線程管理,每一個Android應用在底層都會對應一個獨立的Dalvik虛擬機器執行個體,其代碼在虛擬機器的解釋下得以執行。3:不同於Java虛擬機器運行java位元組碼,Dalvik虛擬機器啟動並執行是其專有的檔案格式Dex4:dex檔案格式可以減少整體檔案尺寸,提高I/o操作的類尋找速度。5:odex是為了在運行過程中進一步提高效能,對dex檔案的進一步最佳化。6:所有的Android應用的線程都對應一個Linux線程,虛擬機器因而可以更多的依賴作業系統的線程調度和管理機制7:有一個特殊的虛擬機器進程Zygote,他是虛擬機器執行個體的孵化器。它在系統啟動的時候就會產生,它會完成虛擬機器的初始化,庫的載入,預製類庫和初始化的操作。如果系統需要一個新的虛擬機器執行個體,它會迅速複製自身,以最快的資料提供給系統。對於一些唯讀系統庫,所有虛擬機器執行個體都和Zygote共用一塊記憶體地區。8:Dalvik是由Dan Bornstein編寫的,名字來源於他的祖先曾經居住過名叫Dalvík的小漁村,村子位於冰島Eyjafjörður 前景很長時間以來,Dalvik虛擬機器一直被使用者指責為拖慢安卓系統運行速度不如IOS的根源。2014年6月25日,Android L 將正式亮相於召開的GoogleI/O大會,Android L 改動幅度較大,Google將直接刪除Dalvik,代替它的是傳聞已久的ART。由於ART的出現,使Dalvik在安卓系統應用方面註定成為曆史。 2架構
不同於其他堆棧結構的Java虛擬機器,dalvik採用的是基於寄存器的架構。dx工具將部分(但不是全部)Java的.class檔案轉換成.dex格式。多個類被包含在一個.dex檔案中。為了節省空間的,各個類檔案中重複的字串和其他常數只在.dex輸出中存放一次。Java位元組碼被轉換成Dalvik虛擬機器所使用的替代指令集。一個未壓縮的.dex檔案通常比來自相同.class檔案的已壓縮.jar文檔小。當被安裝到行動裝置時,Dalvik可執行檔可能會被修改。為了進一步最佳化,虛擬機器可能會調整檔案內部分資料的端序、內聯一些函數和簡單的結構體、並短路掉一些不必要的操作等。
  自Android 2.2開始,Dalvik支援JIT(just-in-time,即時編譯技術)。
  最佳化後的Dalvik較其他標準虛擬機器存在一些不同特性
  ·佔用更少空間
  ·為簡化翻譯,常量池只使用32位索引
  ·標準Java位元組碼實行8位堆棧指令。Dalvik使用16位指令集直接作用於局部變數。局部變數通常來自4位的“虛擬寄存器”區。這樣減少了Dalvik的指令計數,提高了翻譯速度。
  當Android啟動時,Dalvik VM 監視所有的程式(APK),並且建立依存關係樹,為每個程式最佳化代碼並儲存在Dalvik緩衝中。Dalvik第一次載入後會產生Cache檔案,以提供下次快速載入,所以第一次會很慢。
  Dalvik解譯器採用預先算好的Goto地址,每個指令對記憶體的訪問都在64位元組邊界上對齊。這樣可以節省一個指令後進行查表的時間。為了強化功能, Dalvik還提供了快速翻譯器(Fast Interpreter)。 3效能
基於堆棧的機器與基於寄存器的機器誰更有優勢一直是個爭論不休的話題。一般來說,基於堆棧的機器必須使用指令才能從堆棧上的載入和操作資料,因此,相對基於寄存器的機器,它們需要更多的指令才能實現相同的效能。但是基於寄存器機器上的指令必須經過編碼,因此,它們的指令往往更大。這種差異主要是VM機對的作業碼調度造成的,它們往往比其他的因素昂貴,比如說及時彙編。然而,2010年,在Oracle公司(Java技術的擁有者)嵌入式裝置上的標準非圖形化效能測試表明,Android 2.2(最初的版本包括一個即時編譯器)比Java SE嵌入式裝置(兩者都基於 Java SE 6)慢2-3倍。  4類庫
Dalvik虛擬機器既不支援Java SE 也不支援Java ME類庫(如:Java類,AWT和Swing都不支援)。 相反,它使用自己建立的類庫(Apache Harmony Java的一個子集)。 5其他許可與專利Dalvik是基於Apache License 2.0發布的。Google說Dalvik是一個清潔室(clean room)的實現,而不是一個在標準Java運行環境的改進,這意味著它不繼承標準版本的或開源的Java運行環境的著作權許可限制。關於這一點,Oracle和一些專家還在討論中。已於2009年4月收購Sun(Sun Microsystems)的Oracle獲得了Java的專利,在2010年8月12日起訴Google侵犯其著作權和專利。Oracle聲明,Google在開發Android當中直接並且多次侵犯關於Java的智慧財產權。在2012五月,陪審團認為Google沒有侵犯Oracle的專利,法官認定Google所使用的Java APIs沒有著作權。雙方同意零美元法定賠償的9行複製代碼(9 lines of copied code)。非Android平台2011年,Myriad Group軟體公司公布了除了android以外一個新的Dalvik虛擬機器平台連接埠“Alien Dalvik”。   Android runtime
 ART 的機制與 Dalvik 不同。在Dalvik下,應用每次啟動並執行時候,位元組碼都需要通過即時編譯器轉換為機器碼,這會拖慢應用的運行效率,而在ART 環境中,應用在第一次安裝的時候,位元組碼就會預先編譯成機器碼,使其成為真正的本地應用。這個過程叫做先行編譯(AOT,Ahead-Of-Time)。這 樣的話,應用的啟動和執行都會變得更加快速。目錄

1原理講解

2最新訊息

 1原理講解
[1] 與 iOS 相比,Android 的使用者體驗有個相對糟糕的開始。在很長的時間裡,介面一直醜小鴨,卡頓也是揮不去的痛。不過,在 Google 的全力推動,以及硬體廠商的響應下,Android 還是跨越各種阻礙,逐漸壯大起來了。在此過程中,Google 也在經曆著重大的變化。它逐漸從一個只重視資料的公司,轉變為一個重視設計和使用者體驗的公司。從 Android 4.0 開始,Android 擁有了自己的設計語言和應用設計指導。與此同時,Google 也在著手解決卡頓問題。Android 4.1 的“黃油計劃”使系統和應用運行都更加順暢,而 Android 4.2 的“Project Svelte”提升了記憶體管理,使得系統能夠順利運行在硬體設定低端的裝置上。但是,所有這些都沒有解決核心問題,那就是應用運行環境。Dalvik VM 效率並不是最高的。從 Android 4.4 開始,Google 開發人員引進了新的 Android 運行環境 ART(意思就是 Android Runtime。Android 官方頁面的介紹中,也將其稱作新的虛擬機器),以替代舊的 Dalvik VM。它現在是實驗選項,系統預設的運行環境仍然是 Dalvik。ART 會為 Android 帶來怎樣的改變?AndroidPolice 網站對此進行了分析。根據一些基準測試,新的運行環境能夠使大多數應用的執行時間減半。這意味著,CPU 限定大、已耗用時間長的應用能夠更加快速地完成,而一般的應用也能更加流暢,比如動畫效果更順暢,觸控反饋更加即時。在多核處理器的裝置上,多數情況下只需 啟用少量的核心,或者能夠更好的利用 ARM 的 big.LITTLE 架構。另外,它將會顯著提升電池的續航能力以及系統的效能。先行編譯也會帶來一些缺點。一方面,機器碼佔用的儲存空間更大。位元組碼變為機器碼之後,可能會增加 10%-20%,不過在應用程式套件中,可執行檔代碼常常只是一部分。比如最新的 Google+ APK 是 28.3 MB,但是代碼只有 6.9 MB。另一方面,應用的安裝時間會變長。至於延長多少時間,取決於應用本身,一些複雜的應用如 Facebook 和 Google+ 會讓你等待更長時間。總的來說,ART 的優點還是遠遠超越其缺點的。畢竟,影響使用者體驗的要素中,電池續航和應用順暢運行更為重要。我們仍然不知道 ART 何時能夠替代 Dalvik,不過 AndroidPolice 網站說,Google 已經秘密開發了兩年之久。Android 擺脫卡頓的希望,看來就是它了。 2最新訊息11月8日訊息,Google日前發布了Android 4.4系統,在這一版本中,最大的一個變革就是改變了應用程式的運行模式,即拋棄了原來的Dalvik 運行時,改為採用ART運行時。ART(Android Runtime)是一種開發更快執行效率更高且更省電的運行時,它是安卓系統賴以生存的底層運行環境。過去安卓的底層代碼由Dalvik Java虛擬機器運行,這一機制效率不高,被稱作是安卓運行效率低下的“毒瘤”,不過也正是因為有它,才讓應用程式能在不同硬體和架構上運行。ART處理應用程式執行的方式完全不同於Dalvik,運行起來更有效率、耗電更少、占的記憶體也更低。

Dalvik 與 ART

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.