Android N混合使用AOT編譯,解釋和JIT三種運(yùn)行時(shí)
Android N引入了一種包含編譯、解釋和JIT(Just In Time)的混合運(yùn)行時(shí),以便在安裝時(shí)間、內(nèi)存占用、電池消耗和性能之間獲得最好的折衷。
ART是在Android KitKat(譯者注:Android 4.0)引入并在Lollipop(譯者注:Android 5.0)中設(shè)為默認(rèn)解決方案的主要特性之一,是當(dāng)時(shí)的一種新的運(yùn)行時(shí)。ART取代了Dalvik,但是前者與后者仍然保持了字節(jié)碼級(jí)的兼容,因?yàn)榍罢呷栽谶\(yùn)行DEX文件。ART的主要特征之一就是安裝時(shí)對(duì)應(yīng)用的AOT編譯。這種方式的主要優(yōu)點(diǎn)就是優(yōu)化產(chǎn)生的本地代碼性能更好,執(zhí)行起來(lái)需要更少的電量。劣勢(shì)在于安裝文件所需的空間和時(shí)間。在Lollipop和Marshmallow(譯者注:Android 6.0)中,大的應(yīng)用需要數(shù)分鐘才能安裝完。
Android N開(kāi)發(fā)者預(yù)覽版包含了一個(gè)混合模式的運(yùn)行時(shí)。應(yīng)用在安裝時(shí)不做編譯,而是解釋字節(jié)碼,所以可以快速啟動(dòng)。ART中有一種新的、更快的解釋器,通過(guò)一種新的JIT完成,但是這種JIT的信息不是持久化的。取而代之的是,代碼在執(zhí)行期間被分析,分析結(jié)果保存起來(lái)。然后,當(dāng)設(shè)備空轉(zhuǎn)和充電的時(shí)候,ART會(huì)執(zhí)行針對(duì)“熱代碼”進(jìn)行的基于分析的編譯,其他代碼不做編譯。為了得到更優(yōu)的代碼,ART采用了幾種技巧包括深度內(nèi)聯(lián)。
對(duì)同一個(gè)應(yīng)用可以編譯數(shù)次,或者找到變“熱”的代碼路徑或者對(duì)已經(jīng)編譯的代碼進(jìn)行新的優(yōu)化,這取決于分析器在隨后的執(zhí)行中的分析數(shù)據(jù)。這個(gè)步驟仍被簡(jiǎn)稱(chēng)為AOT,可以理解為“全時(shí)段的編譯”(All-Of-the-Time compilation)。
這種混合使用AOT、解釋、JIT的策略的全部?jī)?yōu)點(diǎn)如下。
即使是大應(yīng)用,安裝時(shí)間也能縮短到幾秒
系統(tǒng)升級(jí)能更快地安裝,因?yàn)椴辉傩枰獌?yōu)化這一步
應(yīng)用的內(nèi)存占用更小,有些情況下可以降低50%
改善了性能
更低的電池消耗