乾貨深入了解革命性的「方舟編譯器」,讓你從華為產品看到未來

文章推薦指數: 80 %
投票人數:10人

方舟編譯器發布

昨天的上海發布會上,除非引人耳目的P30系列以外,華為宣布的一項新技術可能更重要——方舟編譯器,號稱安卓性能革命。

第一、華為給出的數據稱基於方舟編譯器,系統操作流暢度提升了24%,系統響應速度提升44%,第三方操作流暢度提升了60%。

第二、提高安卓應用的效率。

安卓應用目前是「邊解釋邊執行」,效率低。

而華為方舟編譯器全程執行機器碼高效運行程序,帶來了架構級優化,顯著提升性能。

可以說這是一個飛躍,體驗會得到極大的提升。

余承東同時宣布,方舟編譯器將面向業界開源,希望App開發廠商可以儘快使用這一編譯器。


Android平台的編譯

1. Android虛擬機有兩種:Dalvik和ART。

2. Java體系中的三種編譯方式:前端編譯、即時編譯(JIT編譯)、靜態提前編譯(AOT編譯)。

3. Dalvik使用JIT編譯,ART 使用AOT編譯。


Android2.2-Android4.4,使用JIT(Just in time compilation)編譯,中文稱之為即時編譯,程序運行之後,實時把JAVA語言編譯為機器語言然後執行。

這種邊解釋邊執行的編譯方式,非常辣雞,導致安卓系統運行起來非常低效率。


Android4.4-Android6.0,使用AOT(Ahead-of-time)編譯,Android 應用在安裝的時候,系統會把所有Java代碼提前編譯為機器碼。

這種模式有兩個缺點不能忍:

1.AOT的缺點是安裝速度巨慢,即便是現在頂級的驍龍855處理器,安裝一個幾十MB的軟體,更要命的時候,應用安裝和系統升級之後的應用優化比較耗時(重新編譯,把程序代碼轉換成機器語言)

2.占用磁碟空間,Java 代碼編譯為機器碼,優化後的文件會占用額外的存儲空間(緩存轉換結果


Android 7.0-現在,JIT 編譯器被再次使用,採用AOT/JIT 混合編譯的策略,執行模式是 AOT + JIT + 解釋執行。

有以下幾個特點:

1.應用在安裝的時候,不會再被編譯,安裝速度非常快。

2.App運行起來之後,系統收集經常被運行的代碼的信息,做兩件事:1.在必要的時候在運行時直接把 Java 代碼編譯為機器碼 (JIT),然後使用機器碼執行提高運行效率。

2.把這個「經常被運行的代碼信息」並生成profile文件保存下來。

3.手機進入 空閒 或者 充電 狀態的時候,系統會掃描 App 目錄下的 「經常被運行的代碼信息」profile 文件並執行 AOT 過程進行編譯。


華為方舟編譯器和華為的生態圈決心

華為推出的方舟編譯器就是為解決Anrorid系統編譯複雜且占據系統硬體大量資源行業難題而誕生。

遺憾的是,余承東並未在發布會上透露更多的技術細節。

因此,只能大膽做一下技術猜測。

技術原理猜測:方舟編譯器簡單的來說就是採用靜態編譯的方式,之前安卓應用上使用動態編譯方式並不能直接在開發時就將應用的複雜代碼轉化完成,還有部分代碼需要我們的手機進行協同轉化,這就很大程度上降低了手機上應用開啟效率。

簡單的來打比方來說,你以前去請菲傭幹活,還得請個英語翻譯,現在有了方舟,跳過翻譯,直接指揮菲傭。

方舟編譯器採用的是靜態編譯方式,與iOS一樣,蘋果的APP也是採用靜態編譯(LLVM編譯器,將應用程式(Swift語言編寫)提前編譯成機器碼,直接運行在晶片上)。

也就是說方舟編譯器在APP開發環節就將JAVA語言編譯成了CPU運行所需要的機器語言,不再需要虛擬機去編譯,極大提高了運行效率。

雖然達不到ios的流暢度(畢竟ios系統封閉,且規則統一),但在不久的未來,相信也可以媲美ios的用戶體驗度。

華為方舟編譯器背後的意義:

我們回頭看看,華為每年持續投入如此之高昂、如此核心的技術成果華為為何會對外開源呢?其實這次華為亮相編譯器,簡直就是透露出自家的系統搞好了,準備開始搞自己的生態圈。

華為發布的不是僅僅是單純的工具,通過革命性的系統優化,不僅讓自己終端產品作業系統更為流暢、效率更高,還藉此吸引眾多應用軟體廠家使用自己的「方舟編譯器」,打造自己的圈子。

試想以後如果華為用自己的系統了。

那麼依賴方舟編譯器現有的技術特點。

現有的所有安卓軟體不需要根據程式設計師再根據華為新系統重新開發,也無需學習新的程序語言。

只需要把以前開發好的軟體通過華為新系統的方舟編譯器再編譯一次,就可以無縫從安卓移植到華為新系統上,而且避免了安卓框架的授權,不再受制於人。

華為近段時間的產品,越來越讓我感覺到看見了華為多年來的厚積薄發,完善的生態鏈愈發讓人看到未來的驚喜。


請為這篇文章評分?


相關文章