广东欢乐麻将
機鋒網>手機>評論>正文
華為方舟編譯器深度解讀 顛覆安卓體驗就靠它
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客戶端

機鋒網登錄頁

請輸入賬號

請輸入密碼

驗證碼錯誤

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

機鋒網注冊頁

請輸入賬號

驗證碼錯誤

驗證碼錯誤

兩次密碼輸入錯誤

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

已有賬號,

機鋒網找回密碼

手機找回郵箱找回

請輸入賬號

驗證碼錯誤

驗證碼錯誤

請輸入密碼

兩次密碼輸入錯誤

广东欢乐麻将 双色球复式中奖金额表 百易街机金蟾捕鱼刷分器 时彩赚钱么 黑龙江时时彩 福彩乐透c515走势图 云南快乐十分app 公户发工资怎么赚钱 时时彩助赢软件 腾讯分分彩买大小技巧 江苏时时代理公司
10.9.94.115