要搞清楚區(qū)別,首先來認識下這2者分別是撒
什么是Dalvik盟戏?
- Dalvik是用于Android平臺的Java虛擬機
- Dalvik虛擬機是Google等廠商合作開發(fā)的Android移動設(shè)備平臺的核心組成部分之一
- 它可以支持已轉(zhuǎn)換為.dex(即Dalvik Executable)格式的Java應(yīng)用程序的運行
- .dex格式是專為Dalvik應(yīng)用設(shè)計的一種壓縮格式绪妹,適合內(nèi)存和處理器速度有限的系統(tǒng)
- Dalvik經(jīng)過優(yōu)化,允許在有限的內(nèi)存中同時運行多個虛擬機的實例柿究,并且每一個Dalvik應(yīng)用作為獨立的Linux進程執(zhí)行
- 獨立的進程可以防止在虛擬機崩潰的時候所有程序都被關(guān)閉
Dalvik特點
- Dalvik是依靠一個Just-In-Time(JIT編譯)編譯器去解釋字節(jié)碼
- Dalvik虛擬機下運行Java時婶肩,要將字節(jié)碼通過即時編譯器(just in time 苗膝,JIT)轉(zhuǎn)換為機器碼(機器碼才是能真正運行的)病附,這會拖慢應(yīng)用的運行效率
- 應(yīng)用安裝時嵌戈,執(zhí)行dexopt指令庵朝,將dex文件優(yōu)化為odex文件
- 應(yīng)用運行時侄旬,會將二進制翻譯成機器碼流程
鑒于Dalvik這個缺點笔链,Google開發(fā)了新的虛擬機叫ART(Android Runtime)
ART(ART代表Android Runtime,Android 4.4引入)
- 應(yīng)用在第一次安裝的時候,字節(jié)碼就會預(yù)先編譯成機器碼,使其成為真正的本地應(yīng)用,這個過程叫做預(yù)編譯(AOT,Ahead-Of-Time)
- 在移除解釋代碼這一過程后皇拣,應(yīng)用程序執(zhí)行將更有效率毫深,啟動更快
ART特點
- AOT編譯
- 應(yīng)用安裝時執(zhí)行dex2oat指令,將dex文件翻譯為oat文件
- 應(yīng)用運行時,無二進制翻譯為機器碼流程
ART分為2種模式邓嘹, 即解釋模式和AOT機器碼模式
- 解釋模式類似于JavaScript棚贾, 就是取出Dex代碼并逐條解釋琳轿,運行仍然會慢
- 機器碼模式就是在安裝app時就編譯好Dex對應(yīng)的機器碼媚送,運行很快咱扣, 這是Android5.0及后續(xù)版本的默認方式。
總結(jié)
ART應(yīng)用啟動快证舟,運行快抵知,但是耗費更多存儲空間仰禽,安裝時間長字支,總的來說ART的功效就是”空間換時間”