天天看點

JVM,Dalvik和ART

1.Dalvik:

它是Google公司自己設計用于Android平台的Java虛拟機。dex格式是專為Dalvik應用設計的一種壓縮格式,适合于記憶體和處理器速度有限的系統。Dalvik允許同時運作多個虛拟機的執行個體,并且每一個應用作為獨立的Linux程序執行。獨立的程序可以防止在虛拟機崩潰的時候所有程式都被關閉。

2.ART:

在Dalvik下,應用每次運作都需要通過即時編譯器(JIT)将位元組碼轉換為機器碼,即每次都要編譯加運作,這一機制并不高效,但讓應用安裝比較快,而且更容易在不同硬體和架構上運作。

ART完全改變了這種做法,在應用安裝時就預編譯位元組碼到機器語言,在移除解釋代碼這一過程後,應用程式執行将更有效率,啟動更快。

3.Dalvik與JVM的差別:

(1)Dalvik指令集是基于寄存器的架構,dex位元組碼更适合于記憶體和處理器速度有限的系統。

(2)而JVM是基于棧的。相對而言,基于寄存器的Dalvik實作雖然犧牲了一些平台無關性,但是它在代碼的執行效率上要更勝一籌。

4.Dalvik與ART的差別:

(1)在Dalvik下,應用每次運作都需要通過即時編譯器(JIT)将位元組碼轉換為機器碼,即每次都要編譯加運作,這雖然會使安裝過程比較快,但是會拖慢應用以後每次啟動的效率。而在ART 環境中,應用在第一次安裝的時候,位元組碼就會預編譯(AOT)成機器碼,這樣的話,雖然裝置和應用的首次啟動(安裝慢了)會變慢,但是以後每次啟動執行的時候,都可以直接運作,是以運作效率會提高。

(2)ART占用空間比Dalvik大(位元組碼變為機器碼之後,可能會增加10%-20%),這也是著名的“空間換時間大法”。

(3)預編譯也可以明顯改善電池續航,因為應用程式每次運作時不用重複編譯了,進而減少了 CPU 的使用頻率,降低了能耗。