業界動態

華為方舟編譯器,華為在底層重造安卓系統

2019/6/30 7:03:09

  一、什么是方舟編譯器

  方舟編譯器雖然是在 4.11 日 HUAWEI P30 系列國內發布會上公布的應用編譯技術,但其實華為早在 5 年前就開始布局,并投入數百專家團隊,歷經多次嘗試,才在 EMUI 9.1 上實現了機器代碼的翻譯。幾千年來,人們從裹腹耐寒到智慧創新,從未停止探索世界的步伐。同時,他們將這些智慧賦予更多的物體,比如機器。

  想讓機器讀懂人類情感,他們之間就需要有個“翻譯”,來充當人機交互的橋梁,也就是專業人士口中的編譯技術。

  它能夠將 C、Java 等高級語言轉換為機器能讀懂的低級語言,將精妙的代碼轉化為 0 和 1 的二進制指令,消除了溝通障礙,從而馴服了機器。

17428786-46395a297b34f969.webp.jpg

  可以說編譯器是軟件與芯片之間的橋梁,其性能,效率直接影響到機器的運行效率。

  二、方舟編譯器和Java的故事

  而既有的安卓系統框架與應用之間,仍然使用的是不被機器直接讀懂的 Java 語義,最初的解決方案是通過增加一個虛擬機制(JVM),相當于一個“中間層”將 Java 語言“翻譯”為機器可以讀懂的匯編指令。

  中間層”翻譯一句 Java 語義機器就執行一段,也就是“邊解釋邊運行”(動態編譯),不但效率低,耗費系統資源,對操作流暢度也有影響。

  盡管安卓系統 6.0 以后采用了 ART (Android Runtime)模式,對調用次數多的 Java 代碼編譯為機器碼(靜態編譯);在設備空閑的時候進行一些預編譯,解決了部分 Java 代碼執行效率問題,但對于動態語義部分還是無法實現靜態編譯,仍需要虛擬機充當“翻譯”邊解釋邊運行,效率和體驗提升有限。

17428786-050340a07bb76fee.webp.jpg

  而方舟編譯器,采用了全新的系統及應用的編譯和運行機制,對所有的 Java 語義全部做到靜態編譯,直接將 Java 語言“翻譯”成機器語言(靜態編譯),消除了虛擬機動態編譯的額外開銷,實現了開發和運行效率的兼容并舉。

  如果把編譯器看做一個翻譯,就好比我們去到一個語言不通的國家,原本只能通過同聲翻譯(虛擬機)來進行交流溝通,難免效率低下。而華為方舟編譯器更像是讓您直接獲得了語言能力,從而可以擺脫同聲翻譯(虛擬機),可以更暢快地與當地人溝通。

17428786-c10a9bb1cd6cdf3b.webp.jpg

  根據華為實驗室的測試數據,EMUI 9.1 在僅僅對系統組件 System Server 應用了華為方舟編譯器后,系統操作流暢度提升 24%,系統響應性能提升 44%。同時,新浪微博極速版在應用方舟編譯器之后,操作流暢度最高提升了60%

17428786-6c6e0ea9d5f7c4f4.webp.jpg

  方舟編譯器編譯的應用在開發階段就已完成。也就是說,只要是經過編譯器編譯的應用,在應用市場上上架了以后,用戶下載的就是編譯過的了。

  三、方舟編譯器在底層重造安卓系統體驗

  據王成錄透露,在方舟編譯器發布當天,電話被打爆了,業界的開發者都高度關注。

  為什么會這樣?因為方舟編譯器是對安卓底層機制的重構,給用戶體驗帶來的提升是顛覆性的。

  它解決的是安卓手機上最大的痛點:“卡頓”。編譯器,就像是人類和機器溝通的橋梁,承擔著將高級語言“翻譯”成機器能懂的機器碼,并按照指令運行。但是,在安卓系統中,編譯器卻有一個繞不過的坎兒:虛擬機。安卓系統雖然在不斷演進,但始終需要虛擬機來實現解釋和執行。

  用翻譯的方式來比喻,更容易理解。安卓程序的虛擬機中有解釋器和編譯器,相當于是有兩個翻譯在運行。解釋器好像現場翻譯,演講者講一句,就需要停下來翻譯一句給編譯器,編譯器則結合上下文一次翻譯一大段。兩個翻譯同時在搞,于是你聽到的內容就是斷斷續續的,你的系統就會變得非??D。

  而且,虛擬機的統一回收內存也是卡頓的罪魁禍首之一,Java的虛擬機模式提供了內存GC(垃圾回收)機制,內存垃圾是集中回收,但全局回收時需要短暫中斷應用,成為隨機卡頓的根因之一。

  那么,方舟編譯器帶來的顛覆在哪里呢?首先,方舟的內存回收機制是隨用隨回收,回收時無需暫停應用,因內存回收的隨機卡頓就消除了。其次,方舟編譯器是在應用打包的時候直接編譯出了機器指令,無需繁瑣的虛擬機運行,徹底消除了虛擬機的動態編譯的額外開銷,從邊翻譯邊執行到提前編譯機器碼直接執行(運行時無需再編譯),大幅提升了效率,讓性能得到大幅提升。

  用量化的方式可以很好地看到這種性能提升的效果:有了方舟編譯器的手機,能實現系統操作流暢度提升24%,系統響應性能提升44%。

  能實現這樣的效果,方舟編譯器的內存回收機制也功不可沒。原來虛擬機的內存回收是統一進行的,全局回收時需要暫停應用(導致卡頓);而方舟編譯器則是內存隨用隨回收,回收時無需暫停應用,顯然能夠避免卡頓。

  方舟編譯器看起來深奧,但是對應用開發者和用戶來說卻很簡單。王成錄說,對于應用開發者無需修改代碼,只需要用方舟編譯器重新編譯,就能帶來性能的提升。對于用戶來說,只要在應用市場下載編譯過的應用,就直接能享受到性能提升的好處。

  重新編譯,會帶來應用安裝包和安裝后占用空間的增大,以微博極速版為例,安卓9.0的apk是9.7Mb,安裝后是37.5Mb,而使用方舟編譯器后的安裝文件apk是23Mb,安裝完后大約不到50Mb。但是,使用方舟編譯器后的性能提升卻是顛覆性的,微博極速版的操作流暢度提升了60%!

  一句話,方舟編譯器給安卓程序的性能提升結果非常顯著。這個性能提升可以用應用執行時間來衡量,而應用執行時間=應用執行指令總條數X平均每條指令所用CPU cycle數/ CPU頻率,CPU頻率由手機硬件決定,方舟編譯器可以實現平均每條指令所用CPU cycle數更少、應用執行指令總條數更少,從而帶來更快的應用執行時間。

17428786-688fd19b51110af7.webp.jpg

  同樣用翻譯來比喻這種編譯帶來的性能提升?!啊癢hat happens in Vegas, stays in Vegas”如果比作最初的應用,如果不編譯,翻譯可能是“在拉斯維加斯發生的一切,就留在拉斯維加斯”,而方舟編譯器編譯帶來的則是“勿念過往 活在當下”,顯然要好得多。

  總結

  所以,方舟編譯器、EROFS超級文件系統等顛覆性的技術創新,只是華為在軟件領域不斷突破和努力的縮影。華為正在憑借自己的技術實力和不斷努力,重造安卓系統的體驗。

  除了硬件的技術突破,軟件也在用戶體驗中扮演越來越重要的角色。這就是軟件的力量,通過持續的技術進步,持續的生態開放,讓消費者感受到,華為的產品體驗在進步,安卓系統的體驗在進步。

華為 方舟編譯器
湖南快乐十分