什么是Dalvik?
Dalvik是Google公司自己設(shè)計(jì)用于Android平臺(tái)的虛擬機(jī)。
Dalvik虛擬機(jī)是Google等廠商合作開(kāi)發(fā)的Android移動(dòng)設(shè)備平臺(tái)的核心組成部分之一它可以支持已轉(zhuǎn)換為 .dex格式的Java應(yīng)用程序的運(yùn)行, .dex格式是專(zhuān)為Dalvik設(shè)計(jì)的一種壓縮格式,適合內(nèi)存和處理器速度有限的系統(tǒng)。
Dalvik經(jīng)過(guò)優(yōu)化,允許在有限的內(nèi)存中同時(shí)運(yùn)行多個(gè)虛擬機(jī)的實(shí)例,并且每一個(gè)Dalvik應(yīng)用作為一個(gè)獨(dú)立的Linux進(jìn)程執(zhí)行。獨(dú)立的進(jìn)程可以防止在虛擬機(jī)崩潰時(shí)候所有程序都被關(guān)閉.
很長(zhǎng)時(shí)間以來(lái),Dalvik虛擬機(jī)一直被用戶(hù)指責(zé)為拖慢安卓系統(tǒng)運(yùn)行速度不如IOS的根源。2014年6月25日,Android L正式亮相于召開(kāi)的谷歌i/o大會(huì),Android L改動(dòng)幅度較大,谷歌將直接刪除Dalvik,代替它的是傳聞已久的ART.
Dalvik和JVM有啥關(guān)系?
主要區(qū)別:
Dalvik是基于寄存器的,而JVM是基于棧的。
Dalvik運(yùn)行dex文件,而JVM運(yùn)行java字節(jié)碼
自Android 2.2開(kāi)始,Dalvik支持JIT(just-in-time,即時(shí)編譯技術(shù))。
優(yōu)化后的Dalvik較其他標(biāo)準(zhǔn)虛擬機(jī)存在一些不同特性:
1.占用更少空間
2.為簡(jiǎn)化翻譯,常量池只使用32位索引
3.標(biāo)準(zhǔn)Java字節(jié)碼實(shí)行8位堆棧指令,Dalvik使用16位指令集直接作用于局部變量。局部變量通常來(lái)自4位的”虛擬寄存器”區(qū)。這樣減少了Dalvik的指令指數(shù),提高了翻譯速度。
什么是ART?
ART的機(jī)制與Dalvik不同。在Dalvik下,應(yīng)用每次運(yùn)行的時(shí)候,字節(jié)碼都需要通過(guò)即時(shí)編譯器(just in time, JIT)轉(zhuǎn)換為機(jī)器碼,這會(huì)拖慢應(yīng)用的運(yùn)行效率,而在ART環(huán)境中,應(yīng)用在第一次安裝的時(shí)候,字節(jié)碼酒會(huì)預(yù)先編譯成機(jī)器碼,使其成為真正的本地應(yīng)用。這個(gè)過(guò)程叫做預(yù)編譯(AOT,Ahead-Of-Time). 這樣的話,應(yīng)用的啟動(dòng)(首次)和執(zhí)行都會(huì)變得更加快速.
ART有什么優(yōu)缺點(diǎn)呢?
優(yōu)點(diǎn):
1,系統(tǒng)性能的顯著提升
2,應(yīng)用啟動(dòng)更快,運(yùn)行更快,體驗(yàn)更流暢,觸感反饋更及時(shí)
3,更長(zhǎng)的電池續(xù)航能力
4,支持更低的硬件
缺點(diǎn):
1, 機(jī)器碼占用的存儲(chǔ)空間更大,字節(jié)碼變?yōu)闄C(jī)器碼之后,可能會(huì)增加10%-20%(不過(guò)在應(yīng)用包中,可執(zhí)行的代碼常常只是一部分。比如最新的Google+ Apk是 28.3mb, 但是代碼只有6.9mb)
2,應(yīng)用的安裝時(shí)間會(huì)變長(zhǎng)