Dalvik和ART執行時環境的區別

yangxi_001發表於2016-12-01

在此,我並沒有打算深入的學習Dalvik和ART兩種方式的實現原理,只是想知道他倆的區別。之前,也是零零散散的看過,並沒有總結成文字。在此,總結下。

Dalvik

以下內容來自wikipedia

Dalvik虛擬機器,是Google等廠商合作開發的Android移動裝置平臺的核心組成部分之一。它可以支援已轉換為.dex(即“Dalvik Executable”)格式的Java應用程式的執行。.dex格式是專為Dalvik設計的一種壓縮格式,適合記憶體和處理器速度有限的系統。Dalvik由Dan Bornstein編寫的,名字來源於他的祖先曾經居住過的小漁村達爾維克(Dalvík),位於冰島Eyjafjörður。
大多數虛擬機器包括JVM都是一種堆疊機器,而Dalvik虛擬機器則是暫存器機。兩種架構各有優劣,一般而言,基於堆疊的機器需要更多指令,而基於暫存器的機器指令更長。

Dalvik經過優化後,允許在有限的記憶體中同時執行多個虛擬機器的例項,並且每一個Dalvik應用作為一個獨立的Linux程式執行,獨立的程式可以防止在虛擬機器崩潰的時候所有程式都被關閉。其實就是每一個應用都是作為獨自的虛擬機器執行,與其他應用互不牽扯。目前在Android4.4及其以下的版本中,應該全都是使用的Dalvik這種模式。

ART (Android Runtime)

Android Runtime(縮寫為 ART),是一種在Android作業系統上的執行環境,由Google公司研發,並在2013年作為Android 4.4系統中的一項測試功能正式對外發布,在Android 5.0及後續Android版本中作為正式的執行時庫取代了以往的Dalvik虛擬機器。ART能夠把應用程式的位元組碼轉換為機器碼,是Android所使用的一種新的虛擬機器。它與Dalvik的主要不同在於:Dalvik採用的是JIT技術,而ART採用Ahead-of-time(AOT)技術。 ART同時也改善了效能、垃圾回收(Garbage Collection)、應用程式除錯以及效能分析。

JIT最早在Android 2.2系統中引進到Dalvik虛擬機器中,在應用程式啟動時,JIT通過進行連續的效能分析來優化程式程式碼的執行,在程式執行的過程中,Dalvik虛擬機器在不斷的進行將位元組碼編譯成機器碼的工作。 與Dalvik虛擬機器不同的是,ART引入了AOT這種預編譯技術,在應用程式安裝的過程中,ART就已經將所有的位元組碼重新編譯成了機器碼。應用程式執行過程中無需進行實時的編譯工作,只需要進行直接呼叫。因此,ART極大的提高了應用程式的執行效率,同時也減少了手機的電量消耗,提高了移動裝置的續航能力,在垃圾回收等機制上也有了較大的提升。 為了保證向下相容,ART使用了相同的Dalvik位元組碼檔案(dex),即在應用程式目錄下保留了dex檔案供舊程式呼叫然而.odex檔案則替換成了可執行與可連結格式(ELF)可執行檔案。一旦一個程式被ART的dex2oat命令編譯,那麼這個程式將會指通過ELF可執行檔案來執行。因此,相對於Dalvik虛擬機器模式,ART模式下Android應用程式的安裝需要消耗更多的時間,同時也會佔用更大的儲存空間(指內部儲存,用於儲存編譯後的程式碼),但節省了很多Dalvik虛擬機器用於實時編譯的時間。

Google公司在Android 4.4中帶來的ART模式僅僅是ART的一個預覽版,系統預設仍然使用的是Dalvik虛擬機器,4.4上面提供的預覽版ART相對於Android 5.0以後的ART執行時庫有較大的不同,尤其體現在相容性上。

以上內容摘自Wikipedia

那麼,Dalvik和ART的區別是啥呢?

平臺支援差別:

Dalvik Android 4.4 及其以下平臺使用的虛擬機器; 
ART Android4.4以上平臺使用的虛擬機器技術;

工作原理差別:

在應用程式啟動時,JIT通過進行連續的效能分析來優化程式程式碼的執行,在程式執行的過程中,Dalvik虛擬機器在不斷的進行將位元組碼編譯成機器碼的工作。

ART引入了AOT這種預編譯技術,在應用程式安裝的過程中,ART就已經將所有的位元組碼重新編譯成了機器碼。應用程式執行過程中無需進行實時的編譯工作,只需要進行直接呼叫.因此,ART極大的提高了應用程式的執行效率,同時也減少了手機的電量消耗,提高了移動裝置的續航能力,在垃圾回收等機制上也有了較大的提升。

相對於Dalvik虛擬機器模式,ART模式下Android應用程式的安裝需要消耗更多的時間,同時也會佔用更大的儲存空間(指內部儲存,用於儲存編譯後的程式碼),但節省了很多Dalvik虛擬機器用於實時編譯的時間

總結:

編譯模式 RAM記憶體 ROM記憶體 流暢度 省電 相容性 載入速度
Dalvik 普通 普通
ART 有待優化

參考資料:

  1. Dalvik虛擬機器
  2. Android Runtime

相關文章