去年,Facebook使用叫ReDex的位元組碼優化工具優化了他們的安卓應用的效能。
現在,ReDex已經開源了。安卓開發者可以免費地使用這個工具優化自己的應用。也可以將它用作其它安卓位元組碼優化工具的基礎。
在Facebook工程部落格的一篇文章中指出,.DEX(安卓的可執行檔案的形式)檔案中的類,並不是按照應用啟動時候載入的順序載入的,而是按照編譯工具指定的順序載入的。
ReDex使用程式執行時產生的執行資料判定哪些類應該在.DEX檔案中被優先載入。“想要最小化從記憶體中讀取資料的次數,最好從啟動的時候就載入位元組碼。”Facebook稱,他們使用ReDex對應用優化之後,對儲存的讀取減少了25%,執行速度提高了30%。
關於這個速度,Facebook稱,在儲存較慢的老舊機器上效果非常明顯,但是對於新的收集,效能也有明顯的提高。Facebook在一臺搭載了安卓4.4的全新的Nexus4上(有35%的安卓裝置執行這個版本)測試,啟動時間從2秒降至1.6秒。
Runtime分析可以用來刪除無關的後設資料和介面,但是開發者也可以自定義優化的行為。比如,有些方法即使沒有直接被呼叫,也可以讓它們保留下來。
這個優化是在應用編譯完成之後進行的。也就是說,理論上你也可以結合其他優化,比如對Java進行虛擬機器層的優化和語言的優化,像即將到來的Java 9的語言模組特性等等。
優化Java的位元組碼檔案並不是一種新技術。還有其他的開源專案,例如ProGuard就可以通過刪除執行時沒有使用的程式碼進行優化。但是它並不能像ReDex那樣按照執行順序來重新組織類。