Android 下一個(gè)版本將會(huì)有兩個(gè)重大改變。其中一個(gè)是明顯的改變,系統(tǒng)界面采用全新的Material Design,另一個(gè)改變屬于底層部分,但是也直接影響到用戶體驗(yàn)。Google將徹底拋棄 Davik,啟動(dòng)新的應(yīng)用環(huán)境ART(Android Runtime)。ART 能否解決長(zhǎng)期困擾Android的卡頓問題?AnandTech網(wǎng)站對(duì)此進(jìn)行了深入的分析。
架構(gòu)
ART 完全兼容Dalvik的字節(jié)碼格式dex,因此,開發(fā)者編寫軟件不會(huì)受到影響,也無(wú)需擔(dān)心兼容性問題。ART的一大變化是,它不僅支持即時(shí)編譯(JIT),而且支持預(yù)先編譯(AOT)。在Dalvik上,每次軟件運(yùn)行,都需從字節(jié)碼編譯為原生代碼,ART可以只編譯一次。然后,軟件每次運(yùn)行時(shí),執(zhí)行編譯好的原生代碼。預(yù)先編譯也為新的優(yōu)化帶來(lái)了可能性。同時(shí),這也會(huì)明顯改善電池續(xù)航,因?yàn)檐浖\(yùn)行時(shí)不用編譯了,從而減少了CPU的使用頻率,降低了能耗。
ART 也有一些缺點(diǎn)。其中一個(gè)是,設(shè)備首次啟動(dòng),以及應(yīng)用的首次啟動(dòng)時(shí)間會(huì)變長(zhǎng),不過,Google 宣稱說,這種差別不是很大,而且他們會(huì)在這方面努力,使其接近甚至超過 Dalvik。另一個(gè)缺點(diǎn)是原生代碼占用空間更大,不過,現(xiàn)在設(shè)備的空間應(yīng)該都足夠。
垃圾回收
Android 虛擬機(jī)是自動(dòng)內(nèi)存管理。優(yōu)點(diǎn)是,開發(fā)者無(wú)需擔(dān)心內(nèi)存管理,缺點(diǎn)是,開發(fā)者失去了控制權(quán),依賴于系統(tǒng)本身的機(jī)制。Dalvik 的垃圾回收機(jī)制是造成系統(tǒng)卡頓的原因之一。在Dalvik虛擬機(jī)下,啟動(dòng)垃圾回收機(jī)制會(huì)造成兩次暫停(一次在遍歷階段,一次在標(biāo)記階段)。所謂暫停,就是應(yīng)用的所有線程都不再執(zhí)行。如果暫停時(shí)間過長(zhǎng),應(yīng)用渲染中就會(huì)出現(xiàn)掉幀。用戶體驗(yàn)上來(lái)說,就是應(yīng)用運(yùn)行的時(shí)候出現(xiàn)卡頓。
Google宣稱,Neuxs 5的平均暫停時(shí)間是54ms,結(jié)果就是,每次垃圾回收啟動(dòng),平均掉幀是4幀。如果應(yīng)用編寫的不好,情況會(huì)更加糟糕。Anandtech測(cè)試了FIFA游戲。Dalvik環(huán)境下,啟動(dòng)應(yīng)用的幾秒內(nèi),垃圾回收啟動(dòng)9次,應(yīng)用暫停時(shí)間總和603ms,總共掉幀是214幀。在ART下,情況有了極大改善。同樣時(shí)間里,應(yīng)用暫停時(shí)間總和是12.364ms(4次前臺(tái)垃圾回收,2次后臺(tái)垃圾回收),總共掉幀是63幀。
ART 能夠做到這一點(diǎn),是因?yàn)閼?yīng)用本身做了垃圾回收的一些工作。垃圾回收啟動(dòng)后,不再是兩次暫停,而是一次暫停。在遍歷階段,應(yīng)用不需要暫停,而標(biāo)記階段的暫停時(shí)間也大大縮短,因?yàn)?Google使用了一種新技術(shù)(packard pre-cleaning),在暫停前就做了許多事情,減輕了暫停時(shí)的工作量。Google承諾說,他們已經(jīng)把平均暫停時(shí)間降到了3ms,遠(yuǎn)遠(yuǎn)超過Dalvik的垃圾回收。
與此同時(shí),Google還改進(jìn)了內(nèi)存分配系統(tǒng),把分配速度加快了10倍。垃圾回收算法也進(jìn)行了修改,以增強(qiáng)用戶體驗(yàn),避免應(yīng)用被打斷。
64位支持
ART支持64位系統(tǒng),這會(huì)帶來(lái)性能上的提升,加密能力的大幅改進(jìn),同時(shí)保持與現(xiàn)有32位應(yīng)用的兼容性。與蘋果不同的是,Google使用了指針壓縮,以避免轉(zhuǎn)換到64位后,空間占用大幅增加,其虛擬機(jī)仍然是 32 位指針。
Google宣稱,現(xiàn)有Play Store上應(yīng)用中,85%都可以轉(zhuǎn)移到64位,剩下的15%有原生代碼,需要重新編譯。總的來(lái)說,轉(zhuǎn)移到64位應(yīng)該會(huì)在短時(shí)間內(nèi)完成。
總結(jié)
從許多方面來(lái)說,Google兌現(xiàn)了其提升性能的承諾,解決了困擾Android的諸多問題。Android的一些致命弱點(diǎn),原因在于非原生應(yīng)用和自動(dòng)內(nèi)存管理系統(tǒng),ART在這些方面做出了大量改進(jìn)??傊趹?yīng)用的流暢度和性能方面,Android終于可以與iOS一決高下了。