機鋒網>手機>評論>正文
華為方舟編譯器深度解讀 顛覆安卓體驗就靠它
2019-08-07 17:09:10 【機鋒網】 作者:機鋒網 責編:機鋒網
0
機鋒網

【機鋒評論】“逆水行舟”這個詞表示逆著水流行船,用來比喻不努力就要后退。其實說實話,從筆者個人對安卓系統認知和大環境來看,華為的方舟編譯器,既是一套適合國人使用的編譯器,又是未來安卓系的一大發展趨勢。方舟編譯器,從筆者對其了解來看,其實有幾點是最為重要:


timg.jpeg


在系統方面


1、干掉了復雜的Java虛擬機。

2、干掉了混合語言互相調用帶來的JNI開銷。

3、不用改變編程習慣,即可使用方舟編譯器進行優化。

4、引用計數法,對系統內存進行隨時用隨時回收,消除卡頓。


對使用體驗:


1、通過華為方舟編譯器,替換Android system-server服務,讓手機運行得到本質提升,這包括手機APP打開速度和流暢度。

2、兼容市面上主流安卓應用。


想干掉復雜的Java虛擬機 華為擁有神秘“黑科技”


在講華為這項“黑科技”之前,有必要為大家講解什么叫“虛擬機”。早在安卓系統誕生起,就用java語言進行編寫,但是在運行過程中,需要借助虛擬機機制來編譯源代碼,在Android 1.0時代,這個虛擬機叫Dalvik,到Android 2.2,引入了JIT編譯器,雖然可以讓用戶在啟動APP時候,將經常使用的功能直接編譯為機器語言,但是仍舊需要每次都重新編譯,大大增加手機的處理負擔。


ChMlWl1C26uIanLVAAEfXYqN6csAAMSrwB188MAAR91514.jpg

圖片來自網絡


Android 5.0時代,Dalvik虛擬機升級到了ART,JIT編譯器也“升級”到了AOT,即用戶在下載APP到手機安裝時候,就直接可以把編譯的代碼直接編譯成機器語言,當然還有部分沒有編譯的代碼,這個就在用戶啟動APP時候再使用解釋器來編譯。雖然比1.0運行效率要高,但是犧牲了安裝時間。


到Android 7.0時代,為了解決安裝時間過長問題,采用了混合編譯機制,即在安裝APP時候不編譯中間代碼,而是等APP空閑下來時,先通過AOT靜態編譯出一部分機器代碼。如果AOT環境下遇到問題,再激發JIT編譯器+解釋器進行“輔助”。


ChMlWl1DpVeIbL1fAABL8_rRDbIAAMTmwBcb1cAAEwL184.jpg

圖片來自網絡


但是上述的代價,就是需要大量運行內存和不斷的高存儲寫入,進而增加功耗和發熱。而華為干掉虛擬機,其實就是將Java代碼直接編譯成010101的機器碼。但是大家要明白,Java語言里有靜態語義和動態語義,大多數的動態語義,java無法做到直接編譯還得交給虛擬機。


方舟編譯器則解決了靜態編譯動態語義的兩點最大難題,設計數據模型和運行時候的高效獲取動態信息問題,前者大規模研究了java動態語句,進行數據建模,在面對后者問題時,華為單獨設計了一套具有核心專利的動態語義匹配機制。


這樣在克服這兩點困難后,就不再需要虛擬機了,筆者認為,其實安卓系統卡頓的一切緣由,都是虛擬機在作祟。此外,筆者也大膽猜測,方舟編譯器或許就在為鴻蒙系統做準備。


干掉混合語言互相調用帶來的JNI開銷


這點其實同樣和java語言有關系,目前大部分常用的軟件都是Java和C/C++等語言混合編寫而成,為了能夠讓APP可以正常運行,就需要互通有無,這樣一個“通用”接口就出現了——JNI,手機在調動APP時候,需要分配一部分資源給到JNI做調度,這樣會大幅度占據硬件資源,而方舟編譯器其實統一了各種語言,實現統一中間IR,為此,華為對IR已經進行了超過五年的研究,并研發了一套專利,這樣使用不同代碼,可以在相應開發環境中,統一成一套可以直接執行的機器代碼。


ChMlWl1DqoKICvfvAAESbSPcHgAAAMTqgA31AYAARKF125.jpg

圖片來自網絡


當然還有一點,筆者就直接放在這個小專題中講,即代碼優化,開發者可以自行代碼優化,也可以通過方舟編譯器預置的算法進行代碼優化。這樣在編程進行代碼優化時候,就在方舟編譯器這個環境中即可,從源代碼到后端的機器碼,均可以非常方便的編譯。


而筆者發現,華為另一大計劃,是想通過代碼云端化,讓所有開發者參與進來,共同對代碼進行優化,進而讓最后的編譯效率得到提升。


結束安卓虛擬機GC內存回收問題


我們知道,安卓手機早期運行內存并不高,當手機內存資源不能滿足不斷增加的新請求時候,安卓系統內,就會調用虛擬機的GC(Garbage Collection)機制,換句話講,如果激發出GC,就會讓手機運行的Java線程全部暫停,并等待回收內存空間。此外,這個機制一旦被激發,外界幾乎不能做任何更改和設置,用戶無法把它刪掉,這樣最終會引起手機卡頓。


屏幕快照 2019-08-07 下午5.06.11.jpg

圖片來自網絡


其實針對這個問題,解決方法非常簡單,只要增加運行內存即可,這也就解釋了,為什么目前手機運行內存不斷飆升,從一開始的256M RAM,到今天的12GB RAM。其實也可以從手機使用角度來分析:手機APP應用體積不斷變大、內容越來越豐富、畫面特效也達到了和PC端一樣,勢必會增加手機內部資源,加上安卓的GC機制,最后其實“順理成章”的會造成卡頓。


華為解決安卓虛擬機GC回收機制問題,采用的是一項名為引用計數法的技術,這項技術可以對內存進行實時回收,此外,還配合消除環算法,來避免回收帶來的卡頓。另外,為了抑制手機運行內存被環引用占據,方舟編譯器還引入了annotation的“告警”標示,對基礎類的環進行標注,筆者大膽推測,如果開發者增加標注,那最終將會減少系統卡頓。


寫在最后:


從目前工信部數據來看,目前已經有20款5G手機等待上市,5G設備終端已經非常成熟,這將直接帶動5G市場活力,另外隨著運營商資費下降,新一輪的換機風潮,將會很快來臨。而帶動的視頻類內容,也將會掀起一股潮流。這些比圖文更加直觀的內容,勢必會增加手機硬件資源的占用,而系統體驗,是最容易讓消費者直接感受到的,如果想要從“根基”做出改變,就需要從系統入手。


而華為方舟編譯器的出現,確實是華為生態系統中非常重要一環,就像“樹根”一樣,而移動終端和IOT等設備,就如同收獲的果實。未來,就像余承東說的那樣:“它詳細解讀了我們如何用十年努力,讓方舟編譯器和世界對話,讓手機的使用體驗更加流暢。接下來方舟編譯器會全面開源,期待更多合作伙伴加入方舟陣營,一起為消費者帶來全新的移動應用生態和體驗!”


評論

關注微信公眾號

下載APP客戶端

機鋒網登錄頁

請輸入賬號

請輸入密碼

驗證碼錯誤

忘記密碼? 沒有賬號,立即注冊

機鋒網注冊頁

請輸入賬號

驗證碼錯誤

驗證碼錯誤

兩次密碼輸入錯誤

您還未接受機鋒網用戶協議

已有賬號,

機鋒網找回密碼

手機找回郵箱找回

請輸入賬號

驗證碼錯誤

驗證碼錯誤

請輸入密碼

兩次密碼輸入錯誤

利盈国际彩票平台
10.9.94.115