要弄清楚Dalvik和Art的區別,首先得知道它們的概念:
Dalvik虛擬機
是Google等廠商合作開發的Android移動設備平臺的核心組成部分之一。它可以支持已轉換為.dex(即“Dalvik Executable”)格式的Java應用程序的運行。.dex格式是專為Dalvik設計的一種壓縮格式,適合內存和處理器速度有限的系統。Dalvik由Dan Bornstein編寫的,名字來源于他的祖先曾經居住過的小漁村達爾維克(Dalvík),位于冰島Eyjafj?reur。
大多數虛擬機包括JVM都是一種堆棧機器,而Dalvik虛擬機則是寄存器機。兩種架構各有優劣,一般而言,基于堆棧的機器需要更多指令,而基于寄存器的機器指令更長。
從Android 5.0版起,Android Runtime(ART)替換Dalvik成為系統內默認虛擬機。
Android Runtime(縮寫為ART)
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運行時庫有較大的不同,尤其體現在兼容性上。
根據上面的維基百科介紹,可以總結出以下:
ART優點:
1、系統性能的顯著提升。
2、應用啟動更快、運行更快、體驗更流暢、觸感反饋更及時。
3、更長的電池續航能力。
4、支持更低的硬件。ART缺點:
1、機器碼占用的存儲空間更大,字節碼變為機器碼之后,可能會增加10%-20%(不過在應用包中,可執行的代碼常常只是一部分。比如最新的 Google+ APK 是 28.3 MB,但是代碼只有 6.9 MB。)
2、應用的安裝時間會變長。