JVM和DVM的區(qū)別
-
DVM和 JVM 執(zhí)行的字節(jié)碼文件的區(qū)別
JVM執(zhí)行的字節(jié)碼文件是.class文件笙以,而DVM上執(zhí)行的則是Dex文件淌实。之前的文章已經(jīng)詳細(xì)分析了這兩種文件的區(qū)別,這里放一個(gè)圖加深記憶
- JVM是基于棧,而DVM是基于寄存器的
由于CPU訪問(wèn)寄存器速度快于訪問(wèn)內(nèi)存速度拆祈,所以DVM在編譯的時(shí)候花費(fèi)時(shí)間更少恨闪,運(yùn)行更快 - DVM可以在有限的內(nèi)存中同時(shí)運(yùn)行多個(gè)虛擬機(jī)的實(shí)例,所以Android為每一個(gè)進(jìn)程分配一個(gè)DVM虛擬機(jī)放坏,這樣可以防止虛擬機(jī)崩潰的時(shí)候所有程序都被關(guān)閉咙咽。
- Android中存在一個(gè)虛擬機(jī)進(jìn)程Zygote,作為虛擬機(jī)實(shí)例的孵化器淤年,它在系統(tǒng)啟動(dòng)的時(shí)候就會(huì)產(chǎn)生钧敞,它會(huì)完成虛擬機(jī)的初始化、庫(kù)的加載麸粮、預(yù)制類庫(kù)和初始化的操作溉苛。如果系統(tǒng)需要一個(gè)新的虛擬機(jī)實(shí)例,它會(huì)迅速?gòu)?fù)制自身弄诲,以最快的速度提供給系統(tǒng)愚战。
DVM和ART的區(qū)別
在Android5.0中,ART取代了Dalvik虛擬機(jī)威根,成為了Android下的默認(rèn)執(zhí)行虛擬機(jī)凤巨。
- DVM每次運(yùn)行都需要通過(guò)即時(shí)編譯器(JIT)去將字節(jié)碼轉(zhuǎn)換為機(jī)器碼,導(dǎo)致啟動(dòng)程序的速度較慢洛搀,但可以獲得更快的安裝時(shí)間和較小的空間占用敢茁。
- ART則是在應(yīng)用安裝時(shí)就預(yù)編譯字節(jié)碼到機(jī)器語(yǔ)言并存儲(chǔ)在本地,這樣在運(yùn)行程序時(shí)就不會(huì)每次都進(jìn)行一次編譯了留美,提高了執(zhí)行效率和啟動(dòng)速度彰檬,但相反的也增加了占用的空間,是一種典型的空間換時(shí)間的策略谎砾。