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