丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號安全和更好的產(chǎn)品體驗,強烈建議使用更快更安全的瀏覽器
此為臨時鏈接,僅用于文章預(yù)覽,將在時失效
業(yè)界 正文
發(fā)私信給李帥飛
發(fā)送

1

解讀 | 華為方舟編譯器是如何實現(xiàn) Android 性能革命的?

本文作者: 李帥飛 2019-04-25 19:25
導(dǎo)語:華為已經(jīng)宣布方舟編譯器會從 2019 年全面開源。

2019 年 4 月 11 日,在上海的華為新品發(fā)布會上,除了可以拍月亮的華為 P30 系列,余承東還親自拋出了兩項軟件層面的“重磅炸彈”,分別是方舟編譯器和 EROFS 超級文件系統(tǒng);其中,華為方舟編譯器可以實現(xiàn)“架構(gòu)級優(yōu)化和顯著提升性能”,可以解決安卓程序“邊解釋邊執(zhí)行”的問題,從而被余承東稱之為 “安卓性能革命”。

解讀 | 華為方舟編譯器是如何實現(xiàn) Android 性能革命的?

發(fā)布會結(jié)束之后,華為方舟編譯器引起了外界的熱議。

那么,方舟編譯器究竟是什么?它的 “革命性” 到底體現(xiàn)在哪里?面對這些問題,華為終于在兩周之后舉行了媒體沙龍,對方舟編譯器進行了更加細致的解讀。

Android 生態(tài)中編譯器的工作原理

在了解方舟編譯器之前,我們必須得首先了解 Android 操作系統(tǒng)中的編譯器的運行機制。

雷鋒網(wǎng)從 VirtualXposed/太極的作者 weishu 處了解到,當(dāng)前 Android 平臺的絕大多數(shù)應(yīng)用是使用 Java 語言寫的,CPU 只能理解匯編指令,無法直接識別 Java 語言的虛擬機指令;為了讓 CPU 能運行 Java 語言編寫的程序,一般有兩種辦法:

  • 引入一個中間層,這個中間層負責(zé) Java 代碼的執(zhí)行,然后這個中間層本身編譯為 CPU 能理解的匯編指令,也就是 CPU -> 中間層 -> Java 代碼。如果這個中間層采用 Java 語言直接作為輸入,理解一句 Java 語句就把Java語言翻譯一下讓 CPU  執(zhí)行一段,我們一般稱這種模式為「解釋執(zhí)行」。毋庸置疑這種方式效率是相當(dāng)?shù)托У摹?/p>

  • 直接把 Java 語言翻譯成 CPU 能理解的機器語言。這里又有兩種方式:第一,在程序運行之前直接把 Java 代碼編譯為機器語言。這種模式稱之為 AOT(Ahead of time)編譯;第二,在程序運行起來之后,實時地把 Java 語言編譯為機器語言然后執(zhí)行。這種模式稱之為 JIT(Just in time) 編譯。

具體在 Android 平臺上,代碼編譯經(jīng)歷了數(shù)個階段。

在 Android 5.0 正式采用 ART 之前,Android 采用的是解釋執(zhí)行 + JIT 的方式執(zhí)行 Java 代碼。在這個階段是貨真價實的「邊解釋邊執(zhí)行」的模式,代碼效率相當(dāng)?shù)拖?,再加上那時候同樣表現(xiàn)不行的 GC(垃圾回收),Android 非常難用。

解讀 | 華為方舟編譯器是如何實現(xiàn) Android 性能革命的?

在 Android 5.0 至 Android 6.0 階段,Google 推出了 ART(Android Runtime)來解決之前的 Java 代碼執(zhí)行效率問題。這個階段采用的是完全 AOT 模式;Android 應(yīng)用在安裝的時候,系統(tǒng)會把所有Java代碼提前編譯為機器碼。這種模式有兩個缺點:

  • 安裝速度巨慢。即使是高通驍龍 855 采用 AOT 模式編譯一下安裝包比較大的應(yīng)用(如支付寶)可能就要一分鐘。而那個時候的 CPU 并不如現(xiàn)在,安裝一個應(yīng)用需要很長時間。更要命的是,系統(tǒng) OTA 開機會對所有的應(yīng)用執(zhí)行 AOT 操作,這時候開機速度可能需要很長時間。

  • 占用磁盤空間,Java 代碼編譯為機器碼之后體積會急劇膨脹。

到了 Android 7.0,Google 做了很大的改進;這一改進是基于這樣一個事實:我們使用一個應(yīng)用的時候,基本每個人只使用它一小部分功能,為什么要把所有代碼全編譯呢?因此只編譯用戶經(jīng)常用的那部分代碼就 OK 了,這樣安裝的時候速度比較快,等用戶啟動的時候系統(tǒng)就能知道哪部分代碼經(jīng)常被執(zhí)行,把這部分代碼編譯為機器碼,運行起來速度也快。

于是 Google 又引入了 JIT,這時候的執(zhí)行模式是 AOT + JIT + 解釋執(zhí)行。具體來看:

  • 應(yīng)用安裝的時候不執(zhí)行 AOT 編譯,安裝速度飛快。初次使用應(yīng)用的時候沒有機器碼,因此只能解釋執(zhí)行。

  • 應(yīng)用運行起來之后,系統(tǒng)收集經(jīng)常被運行的代碼的信息,做兩件事:1)在必要的時候在運行時直接把 Java 代碼編譯為機器碼 (JIT),然后使用機器碼執(zhí)行提高運行效率。2)把這個「經(jīng)常被運行的代碼信息保存起來」。

  • 設(shè)備空閑的時候,系統(tǒng)拿出應(yīng)用運行時候保存的「熱點代碼信息」直接把這些代碼編譯為機器碼 (AOT)。

Android 8.0 上改進了解釋器,解釋模式執(zhí)行效率大幅提升;Android 10.0 上提供了預(yù)先放置熱點代碼的方式,應(yīng)用在安裝的時候就能知道常用代碼會被提前編譯??梢钥吹剑?dāng)前 Android 平臺的執(zhí)行模式在空間占用+安裝速度+運行速度上已經(jīng)達到了一個很好的平衡。

總結(jié)來看,目前的 Android 采用的是解釋執(zhí)行 + 還算可以的 JIT + AOT 的綜合模式;但并沒有擺脫這樣一個前提,即應(yīng)用在被打包成 APK 的時候,采用的還是 Java 代碼。換句話說,在 APK 變成用戶可應(yīng)用的過程中,還經(jīng)歷了一個在 Android 系統(tǒng)內(nèi)部的編譯過程,這是一個繞不過的坎。

解讀 | 華為方舟編譯器是如何實現(xiàn) Android 性能革命的?

按照華為方面在媒體沙龍中的解讀,這個在現(xiàn)有 Android 中繞不過去的坎,被稱為虛擬機(Virtual Machine,簡稱 VM),它包含翻譯器和編譯器,其目的就是把 Java 高級語言轉(zhuǎn)換成機器能懂的語言——這一轉(zhuǎn)換過程導(dǎo)致卡頓,并且 VM 的統(tǒng)一回收內(nèi)存垃圾額也會帶來卡頓。

華為方舟編譯器究竟改變了什么?

首先,方舟編譯器是配合華為 EMUI 9.1 操作系統(tǒng)而打造的一個編譯工具。

按照華為方面的說法,雖然方舟編譯器是在 2019 年 4 月 11 日發(fā)布,但是華為早在 5 年前就開始布局,2013 年推出了自研編譯器 HCC,2014 年編程大神 Fred Chow 加入,擔(dān)任華為編譯器技術(shù)首席科學(xué)家,2016 年華為成立編譯器與編程語言實驗室,投入了數(shù)百的專家團隊經(jīng)歷了多次嘗試,才在 EMUI 9.1 上實現(xiàn)了機器代碼的翻譯。

解讀 | 華為方舟編譯器是如何實現(xiàn) Android 性能革命的?

按照上述 Android 操作系統(tǒng)的代碼運行邏輯,華為編譯器最大的優(yōu)勢在于,它繞過了 VM。

簡單來說,在百人專家團隊的打造下,華為方舟編譯器可以將高級語言(Java)直接變成機器碼,無需再通過 Android 操作系統(tǒng)中內(nèi)置的 VM 編譯器。按照華為方面的說法:方舟編譯器編譯的應(yīng)用在開發(fā)階段就已完成;也就是說,只要是經(jīng)過編譯器編譯的應(yīng)用,在應(yīng)用市場上上架了以后,用戶下載 APK 的就是編譯過的了。

解讀 | 華為方舟編譯器是如何實現(xiàn) Android 性能革命的?

換句話說,通過方舟編譯器,開發(fā)者的應(yīng)用在下載之前就已經(jīng)轉(zhuǎn)化成為機器可以識別的代碼,因而可以在手機上快速安裝、啟動和運行,而無需在經(jīng)過 VM 的編譯——某種程度上,方舟編譯器是將編譯過程提前到應(yīng)用開發(fā)階段,從而大幅度減少了智能手機和操作系統(tǒng)的運行負擔(dān)。

按照華為方面的說法,采用華為編譯器之后,提升效果如下:

  • EMUI 9.1 僅僅對系統(tǒng)組件 System Server 應(yīng)用了方舟編譯器之后,系統(tǒng)流暢速度提升了 24%,系統(tǒng)響應(yīng)速度提升了 44%;

  • 第三方應(yīng)用(目前采用了新浪微博極速版)的操作流暢度提升了 60%。

不可忽視的是,實際上,要想實現(xiàn)華為所言的效果,就首先需要第三方的應(yīng)用開發(fā)者采用方舟編譯器對自家的 App 提前進行改造,從而能夠上架華為應(yīng)用商店——這也是余承東在 4 月 11 日的發(fā)布會呼吁開發(fā)者積極參與的原因。

除了代碼編譯,方舟編譯器也提供了更高效的內(nèi)存機制,它與 Android 內(nèi)存回收的不同之處在于:

內(nèi)存管理是程序開發(fā)與運行時需要重點考慮的部分,也和系統(tǒng)流暢度息息相關(guān)。Android 在內(nèi)存回收上采用集中回收機制,發(fā)聲全局回收時更需要暫停應(yīng)用,這也是隨機卡頓的根因之一。而方舟編譯器提供了更高效的內(nèi)存回收機制,回收時無需暫停應(yīng)用,隨時用隨時回收,大大提高運行速度。

解讀 | 華為方舟編譯器是如何實現(xiàn) Android 性能革命的?

另外,在方舟編譯器的編譯環(huán)境下, 還可以對代碼進行優(yōu)化。目前,由于 Android ART 的 AoT 和 JIT 動態(tài)編譯因為是運行在手機上,受資源所限,因而只能使用簡單的優(yōu)化算法。而方舟編譯器由于是在應(yīng)用開發(fā)階段進行編譯,所以可以允許不同應(yīng)用靈活采用不同的編譯優(yōu)化方案,而且因為在開發(fā)環(huán)境編譯不會受到手機性能的限制,可以使用更多先進的優(yōu)化算法,從而使得每個應(yīng)用的性能達到最佳。

2019,全面開源

其實,在 4 月 11 日的發(fā)布會上,華為方面已經(jīng)表示,方舟編譯器也將開放給第三方合作伙伴,希望共同構(gòu)建開發(fā)者生態(tài)的“方舟朋友圈”。

目前,華為已經(jīng)宣布方舟編譯器會從 2019 年全面開源;其中,華為將在 2019 年 8 月的華為終端開發(fā)者大會宣布方舟編譯框架代碼開源,后續(xù)會在 2019 年 11 月的綠盟開發(fā)者大會實現(xiàn)完整方舟編譯器代碼開源。

對于華為方舟編譯器的開源,雷鋒網(wǎng)將保持關(guān)注。

雷鋒網(wǎng)注:本文部分內(nèi)容編自知乎平臺作者 weishu 的回答內(nèi)容,已經(jīng)獲得作者授權(quán)。

雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。

分享:
相關(guān)文章

作者

雷鋒網(wǎng)編輯,歡迎來撩。微信 ID:XI_308.
當(dāng)月熱門文章
最新文章
請?zhí)顚懮暾埲速Y料
姓名
電話
郵箱
微信號
作品鏈接
個人簡介
為了您的賬戶安全,請驗證郵箱
您的郵箱還未驗證,完成可獲20積分喲!
請驗證您的郵箱
立即驗證
完善賬號信息
您的賬號已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說