Android4.4以上開(kāi)始使用ART虛擬機(jī),在此之前我們一直使用的Dalvik虛擬機(jī),那么為什么Google突然換了Android運(yùn)行的虛擬機(jī)呢?答案只有一個(gè):ART虛擬機(jī)更優(yōu)秀。
Dalvik vs ART
Dalvik Android4.4及以前使用的都是Dalvik虛擬機(jī),我們知道Apk在打包的過(guò)程中會(huì)先將java等源碼通過(guò)javac編譯成.class文件,但是我們的Dalvik虛擬機(jī)只會(huì)執(zhí)行.dex文件,這個(gè)時(shí)候dx會(huì)將.class文件轉(zhuǎn)換成Dalvik虛擬機(jī)執(zhí)行的.dex文件。Dalvik虛擬機(jī)在啟動(dòng)的時(shí)候會(huì)先將.dex文件轉(zhuǎn)換成快速運(yùn)行的機(jī)器碼,又因?yàn)?5535這個(gè)問(wèn)題,導(dǎo)致我們?cè)趹?yīng)用冷啟動(dòng)的時(shí)候有一個(gè)合包的過(guò)程,最后導(dǎo)致的一個(gè)結(jié)果就是我們的app啟動(dòng)慢,這就是Dalvik虛擬機(jī)的JIT特性(Just In Time)。
ART ART虛擬機(jī)是在Android5.0才開(kāi)始使用的Android虛擬機(jī),ART虛擬機(jī)必須要兼容Dalvik虛擬機(jī)的特性,但是ART有一個(gè)很好的特性AOT(ahead of time),這個(gè)特性就是我們?cè)诎惭bAPK的時(shí)候就將dex直接處理成可直接供ART虛擬機(jī)使用的機(jī)器碼,ART虛擬機(jī)將.dex文件轉(zhuǎn)換成可直接運(yùn)行的.oat文件,ART虛擬機(jī)天生支持多dex,所以也不會(huì)有一個(gè)合包的過(guò)程,所以ART虛擬機(jī)會(huì)很大的提升APP冷啟動(dòng)速度。
總結(jié)
ART優(yōu)點(diǎn):
加快APP冷啟動(dòng)速度
提升GC速度
提供功能全面的Debug特性
ART缺點(diǎn):
APP安裝速度慢,因?yàn)樵贏PK安裝的時(shí)候要生成可運(yùn)行.oat文件
APK占用空間大,因?yàn)樵贏PK安裝的時(shí)候要生成可運(yùn)行.oat文件