華為更新的方舟編譯器怎么樣?
謝謝邀請,
華為的方舟編譯器是十年磨一劍的結果,算是一種工匠精神的極致體現,因為從安卓誕生到流行至今天谷歌的精英軍團一直沒有間歇的在優化安卓的性能,但始終沒有跳出java虛擬機這個圈子,華為的方舟編譯器這次是真的做到了,這次華為的開發者大會算是真正的開源方舟編譯器,至2020年代碼將全部開源,方舟編譯器將是安卓系統技術性的革命,其本質意義已經超出了一個編譯器的范疇,準確來講算是一個編譯體系,方舟編譯器真正做到了將動態編譯做成了靜態編譯,生生的把虛擬機在動態運行過程中需要的各種條件采用不同的技術手段給實現了,在全球范圍內真正有實力做這個事情,并且做成功的只有方舟編譯器。
在華為開發者大會進行之前與余大嘴轉載了一篇《華為新貴!方舟編譯器的榮光和使命》的技術文章,里面詳細闡述了方舟編譯器的前前后后發生的一些事情,并且獲取到了方舟編譯器內部專家的訪談得出的第一手的資料信息,并且用長達萬字的文章給戰術出來的,這時候外界才對方舟編譯器有了一個大致的認識過程,今天作為一個在在安卓系統本身開發多年的技術人員角度分析下方舟編譯的一些技術點,以及在具體技術上有哪些突破。
方舟編譯器的前世今生方舟編譯器的起源并不是直接上來就是針對谷歌的安卓下手的,還是源于華為對5G技術的重視,從2009年華為就投入大量的技術研發人員進行5G技術的基礎性研究,開始對編譯體系進行研究,這個時候才開始部署第一批的研究員,從技術層面上講任何一項新的技術突破都需要經歷的一個萌芽期,原始的積累期,這是任何技術都繞不過的問題。
大約研究了四年的時間大約在2013年在面向基站的編譯器HCC框架成立,算是華為完成了編譯器體系的理論到實踐的過程,算是華為公司在編譯器領域有了一個完整的積累,正是有了這次的積累和成功的經驗,開始從5G領域慢慢的向消費電子領域過度,對于技術而言只要是一個方面突破了在基礎理論接近的情況下就可以向別的領域滲透,這次率先在5G基站突破,開始為華為別的部門服務,于2014年正是成立方舟實驗室,承載的目標任務就是優化提升安卓性能,更加直接的任何就是如何拿掉java虛擬機。
不會虛擬機運行安卓系統,恰恰是方舟編譯器最大的技術革命,終于在2017年的時候第一個hello world程序跑通,這時候技術框架的雛形已經形成了,從理論上講拋開虛擬機直接將字節碼靜態變成機器碼,就需要提前預知動態執行指令的動作,難點就在于此其實方舟編譯器只是將這部分的苦力活用窮舉的辦法給做到了,但是不是真正意義上的窮舉,而是在建立了一個查詢庫,將所有的規律以及語法細節逐個擊破,在2018年移植到手機上,2019年在P30手機上對外宣布了方舟編譯器,這才是真正意義上的方舟編譯器,只是想象中間就有很多的技術細節,熟悉java虛擬機的都應該知道,里面運行的機制可不僅僅是完成字節碼的編譯這么簡單的事情了,最大的突破在于第一個hello world代碼的運行成功。
方舟編譯器都有哪些技術突破在講述這個之前先來了解高級Java工程師必須要掌握的虛擬機技術,虛擬機技術的核心
(1).字節碼翻譯成機器碼,這是虛擬機最基礎的工作原理
(2).垃圾回收機制,就是我們常說的GC,在平時寫代碼的過程中圍繞著如何如何更好的方便內存垃圾的回收,需要注意很多的編程細節。
(3).在安卓系統上還多了JNI機制也影響到整體系統的性能問題
(4).中間二進制文件優化空間有限
其實就是講到在java在為了跨平臺操作還是犧牲掉一部分的性能,在功能強大的服務器端未必能夠展示的這么明顯,但在移動手機端這塊影響就比較大了,所以針對這些問題,在安卓設計之初還是有人提出了java運行效率慢的問題,但由于后來安卓生態越來越完善這種聲音變得非常渺小了,因為只是喊不能改變實際的事實,方舟編譯器直接指向了安卓很多性能的缺陷
那么方舟編譯器都有哪些技術突破?
將java代碼直接靜態編程然后導入到機器碼運行。這相當于顛覆了很多固化程序員的認知,java的虛擬機是java運行的必要條件,這也是方舟編譯器最重要的技術突破,未來可能推動java的發展更新,對于java編程語言有極大的促進作用,從2014年具體操作這個事情到最后hello world的運行,用了3年的時間,終于完成了突破,這個突破在于提前分配好動態工作時候的對應的指令,這個工作除了大膽之外更多是苦力活,現在的關鍵是華為公司已經在手機上驗證通過了,這就是長期積累的結果,也在間接的推動安卓生態鏈的完善,所以谷歌也不會舍得華為站到對立面上去。
優化垃圾回收機制。原來的java虛擬機會根據一定的算法時機觸發,但存在回收時系統卡頓的問題,方舟編譯器采用了RC機制,就是C++經常使用的引用計數方式,并且專門設置了一個消除環算法來優化這種機制,相當于碎片化的消除內存垃圾,同時還能支持單個應用內存的消除,這對一些內存清理工具是一種極大的福利,有助于提升整體的優化空間。
解決JNI混合語言造成的開銷。在安卓系統內部引入了jni機制根本上就是為了方便java調用C/C++函數,引入這個機制的同時造成了系統性能的下降,方舟編譯器相當于把多種語言混合在一起的規律給吃透了,又是一次看著像是做苦力一樣的工作,但其中隱含著巨大的工作技巧,不是每個團隊做這樣事情都有結果,敢于向困難亮劍保持懷疑一切的工作態度,這塊涉及到對中間二進制規律的研究,畢竟在IR階段能夠梳理清楚代碼運行軌跡等等。
在統一IR之外修改優化。這塊靈活性非常大了,可以在云端計算優化,也可以在開發真本身的開發環境中優化,所以優化的力度還要根據實際情況。
方舟編譯器會帶來多少影響方舟編譯器會直接解決的是安卓的卡頓問題。對于提升華為手機的用戶體驗是一種極大的提升,但對友商來講到底是用不用方舟編譯器,怎么講都是挺尷尬的一件事情,其實在技術領域更多是樹立了一個標桿,不要什么事情都約定俗成,其實回歸到問題本身來講,主要肯下功夫去做,時間會證明一切,也是典型的工匠精神的一種有效體現。
有助于構建華為生態系統。華為發布的鴻蒙系統就是為了構建生態,方舟編譯器也在推動著這件事情的發展,拿出最好的技術來分享給大家,讓大家圍繞著這個系統來共同發展,鴻蒙系統也是開源系統更是另外一種生態機制,也是為了構建更大的物聯網體系。
方舟編譯器更像是對傳統編程語言的創新,對于技術人員的啟發更大,這是把java虛擬機給生生拿掉了,所以從技術層面來講還能有華為公司做不到的事情嘛,凸顯了華為公司強大的技術研發能力,現在還有廠商在回應華為開發者大會有很多不成立的技術,先把口號喊出來然后激勵自己加倍努力工作,這些年華為吹過的牛皮隨著時間的推移都慢慢實現了,踏踏實實研究技術才是一個科技公司該有的基因,希望能幫到你。