助力 Android 抗衡 iOS,華為發布方舟編譯器!
傳說中的諾亞方舟可以拯救全人類,那麼活在現實的方舟編譯器是否真的能突破 Android 系統性能原有的限制?
(圖源:CSDN 付費下載自東方 IC)
要說上個月於巴黎召開的 P30 系列發布會,華為是以全硬體正面剛蘋果,那麼 4 月 11 日在上海面向國內市場推出 P30 系列手機的發布會,華為就是以不經意的姿態撩了一下 Google。之所以這麼講,是因為這一次的發布會,引發國內消費者熱烈追捧的不僅是比國際版價格要低 2000 元左右的 P30 系列,還有著讓技術圈為之熱議的大事件,即華為消費者業務 CEO 余承東在發布會上僅花費短短兩分鐘時間「隨口一提」且富有神秘感的 Android 系統性能的革命性突破應用——方舟編譯器。
沒有一個硬實力,哪能隨便提革命性突破?
其實單從名稱上來看,不少人的第一感觀就是「高大上」,另外,其似乎也隱喻著未知的創新、無限的潛力以及豐富的擴展性等願景。而對於這個名字的由來,不少網友猜測這可能與華為研發美國編譯技術首席科學家 Fred chow 有關:
第一,他是開源 Open 64 編譯器的首席架構師,具有 25 年的編譯器經驗,於 2014 年加入華為矽谷子公司 FutureWei;
第二,Fred chow 音譯過來可以看成是「方舟」。
那麼真實的方舟編譯器究竟具有怎樣的「魅力」?根據余承東在發布會現場的解釋,華為方舟編譯器可解決 Android 程序「邊解釋邊執行」的低效,能達到架構級優化,且顯著提升性能。
為此,余承東還以汽車運行的例子來凸顯兩種的差別:
- 現有的 Android 系統:存在邊解釋邊執行的低效現象;
- 使用華為方舟編譯器:全程執行機器碼高效運行程序。
其中,邊解釋邊執行是怎麼一回事?全程執行機器碼又是什麼情況?
Android 編譯器原理
首先,不少程序員可能都知道,對於 CPU 而言,無論是用 Java、C/C++、還是用 Python 來寫應用,結果都一樣,因為其根本無法直接識別代碼。畢竟當前的計算機只能根據電壓的高低變化來計算,即高電壓是 1 ,低電壓是 0, 而這種數制方式被稱之為二進位。二進位代碼語言又被稱為機器語言,計算機可以直接識別。因此無論是 Android 應用還是 iOS 應用,想要在 CPU 中運行,都需要經過翻譯或者編譯成機器碼。
接下來,將以 Android 平台舉例說明,眾所周知,大多數的 Android 應用都是由 Java 開發而成,而 Java 代碼的執行依賴於 Java 虛擬機(JVM),其提供了位元組碼文件(.class)的運行環境支持,即在 Java 程序編譯成 .class 文件之後,由 JVM 將程序解釋給本地系統執行,其中,後者的過程通常被叫做「解釋執行」。
此外,還有一種叫做「編譯執行」的模式,這種模式主要分為兩種:
- JIT(Just-in-time,即時編譯),邊運行邊編譯;
- AOT(Ahead-Of-Time,運行時編譯),在程序運行前編譯,可以避免在運行時的編譯性能消耗和內存消耗。
就 Android 系統而言,首次引入 JIT 功能是在 Android 2.2 版本中,彼時Google 的目的是為了提高 Android 的運行速度,即當 App 運行時,JIT 編譯器就會對新類進行編譯,經過編譯後的代碼,會被優化成相當精簡的原生型指令碼,這樣在下次執行到相同邏輯的時候,速度就會更快。不過好景不長,JIT 在運行時編譯開銷大,容易造成卡頓,所以在 4.4 版本之後,Dalvik 虛擬機被逐漸拋棄的過程中,JIT 也被棄用了。
而在隨後的 Android 5.0 系統中,ART 正式取代了 Dalvik,ART 中完全拋棄了 JIT,使用的是 AOT 的編譯方式,這種方式的好處是,當 App 在第一次安裝時,位元組碼會預先編譯成原型指令碼,讓其成為真正的本地應用,這樣App 的啟動及運行速度都會大幅提升。不過這種方式也存在巨大的缺陷,一是安裝應用時需要全面編譯,用戶等待安裝的時間過長;二是安裝過程中翻譯出來的機器碼佔用了大量的內存空間。
因此,Google 為在安裝時間、內存佔用、電池消耗和性能之間獲得折中方案,又於 Android 7.0 版本重新加入了 JIT 編譯模式,即當前的 Android 系統引入的是包含編譯、解釋和 JIT 的混合運行時。詳細而言,當 App 安裝時,首先不用像 Android 6.0 中對應用進行完整的預編譯,而會根據 JIT 編譯器的分析結果,一方面,在設備充電或其餘空閑時間對「cold code」進行解釋;另一方面,對「hot code」在實際使用時由 JIT 進行編譯。
來源:https://source.android.google.cn/devices/tech/dalvik/jit-compiler
以上即為華為所述的原有 Android 系統存在邊解釋邊執行的低效現象,至於方舟編譯器如何達成全程執行機器碼高效運行程序的?
由於該項目暫時還上線開源,目前尚未可知。不過對此不少開發者猜測,方舟編譯器更可能是直接將應用程序的安裝包,即 APK 打包成機器碼格式,得以讓系統可以直接識別。最終結果我們還需等待該項目開源之後才能揭曉謎底。
華為方舟編譯器將會對 Android 系統帶來什麼樣的影響?
不過,余承東於現場表示,通過方舟編譯器,不僅可以解決應用卡頓的問題,還可以為系統操作流暢度提升 24%、系統響應速度提升 44%,第三方應用操作流暢度提升 60%。同時余承東也呼籲,希望 App 開發廠商儘快使用。
這樣看起來,性能大幅提升之後的 Android 應用與 iOS 系統中的應用差距正在逐步縮小,甚至大有超過的趨勢。事實上,方舟編譯器能實現這樣的性能提升,無論是對企業、開發者,還是對用戶而言,也無疑都是一件好事。而對於華為本身而言,從上個月余承東在接受德國《世界報》採訪時表示華為
已經為智能手機和電腦開發了自己的操作系統
,以防美國科技巨頭不再向其授權現有系統後,到這一次透露即將開源的編譯器,整體也可看成是華為正在為其尚未面世的操作系統的生態系統布局做好充足的準備。那麼,對此,你怎麼看?
參考:
https://m.mydrivers.com/yidian/newsview.aspx?tid=523860&s=cm
https://blog.csdn.net/yifanyingying/article/details/79368410
※安防無戰事:一場 10213 億元的誤會
※惠普往事:全球最大的 PC 製造商煉成記!| 極客頭條
TAG:CSDN |