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