30日,餘承東在微博宣佈,方舟編譯器將於8月31日開源。自從今年4月在釋出會上亮相後,終於開始真正面向福斯。那到底方舟編譯器的開源會給我們帶來什麼影響,方舟本身又有什麼優勢呢,下面跟著小編一起揭開這層面紗。
重要的時間線
2009年,開始建立編譯組,第一批海內外研究人員加入,這便是方舟萌芽最初始的團隊。2013年,正式提出編譯器框架構想,這便是方舟的前身。2014年,方舟專案啟動,大批清華、中科院博士加入,其中有在海外的周志德(Fred Chow)。2016年,成立編譯器與程式語言實驗室。2017年5月,方舟編譯器上的第一個 Java 程式 “HelloWorld” 跑通。2017年8月,華為方舟跑通了第一個安卓後臺服務DiskStatus。2018年春節前一週,方舟編譯器跑通 Android 系統所有後臺服務,併成功移植到手機。2018年除夕前夜,啟動方舟編譯手機的Beta測試。2019年4月,華為方舟編譯器在 P30 系列的國內釋出會上對外宣佈。2019年8月,華為方舟編譯器部分開源方舟的實質效果
從時間線我們可以看到,方舟最初從一個編譯組團隊開始,隨後變成了實驗室。方舟專案最初由一個編譯器架構衍生出來,最後逐漸壯大,直到編譯第一個Java程式,跑通第一個安卓服務,編譯出第一個手機應用,一路勢如破竹,一戰成名。
由這個路徑可以看到,方舟最終是應用到手機上的,特別是在安卓手機上。同樣的程式碼,經過方舟編譯後,操作流暢度有顯著的提升。在華為自己的P30手機上,使用方舟編譯後的安卓後臺服務,提升手機系統操作流暢度高達24%,系統響應效能提升44%。下面是一個直觀的對比圖。
是不是速度快了很多,這就是技術的力量。同時說個題外話,支付寶本週更新了一個版本,達到了應用秒開,很多人瞬間就想到是不是方舟編譯器的功勞,後來支付寶迴應說,是自己對架構做了優化,並非使用了方舟。
如何點石成金
看到了P30這麼流暢的速度,是不是很心動呢。但既然是方舟的功勞,也就是說我們不必都買P30,只要方舟開源,利用方舟編譯同樣的應用,就能讓載入速度有顯著的提升。但同時也有人問,既然有方法能讓速度更快, 那為什麼沒有人早點做出來呢,甚至是谷歌自己也不對安卓系統做優化呢,這個就得從編譯技術說起了。
計算機的世界裡只有二進位制0和1,而人類對於這種枯燥的數字敏感度極低,所以發明了高階程式語言,用近似人類的語言來組織程式。編譯器就是將高階語言轉換成計算機二進位制語言的工具。方舟編譯器就是將程式設計師用Java寫的程式轉換成計算機語言的工具。但是和安卓原來的編譯器比,為什麼速度會變快呢,這又得從安卓系統的特殊性說起了。
安卓源自於Linux核心,而Linux是用C/C++語言開發的系統,為什麼安卓用Java編譯也能執行起來?因為安卓為了能夠執行Java程式,在系統呼叫前經過了一個虛擬機器,虛擬機器就像一個翻譯,使Java語言和C語言也能互通。安卓使用Java作為開發語言,真是成也蕭何敗蕭何,依靠眾多的Java使用者,和Java本身的高階語言特性,使得安卓的開發門檻降低,一下湧現眾多開發者,也使安卓從0開始的生態,短時間內就擁有的眾多的應用數量。但經過虛擬機器這樣的“翻譯”,也意味著執行效率降低了。谷歌對這件事自然也是清楚的,從第一代的Dalvik虛擬機器,到後來的JIT機制,再到ART,再到安卓7.0的混合編譯,安卓的流暢度在逐步上升。
而方舟在優化這條路上,走的是另外一條路線。首先,Java號稱跨平臺,一次編譯多處執行,靠的就是虛擬機器。雖然在不同的硬體平臺上執行,但有虛擬機器這樣的中轉站,所以可以無視硬體而執行。而首先方舟去掉的就是虛擬機器。要想讓Java直接去掉虛擬機器而執行,是有很多技術上的問題的,這裡就不展開了。但通過方舟實驗室多年的努力,克服種種難關,終於把這個問題解決了,最終方舟編譯出來的應用是不執行在虛擬機器上的。去掉虛擬機器後執行速度之快是不言自明的,但也會帶來一個問題,這個應用不能在不同的手機運行了。如果手機使用的晶片方案不同,那麼程式設計師得根據不同的手機編譯不用的應用,而且應用商店也得根據手機的不同,提供不同的安裝包。好吧,就是程式設計師多累一點,對使用者來說,完全沒增加什麼操作。
另外,方舟優化了安卓記憶體回收機制,可以消除原來的莫名卡頓。
船來了
從官方宣傳來說,方舟走的是這四步:
幹掉虛擬機器幹掉混合語言呼叫的開銷編譯時程式碼優化使用新的記憶體回收機制可以看到,方舟已經不僅僅是一個編譯器,更是一個編譯執行系統。
隨著方舟的開源,會有更多的人為這個系統添磚加瓦,到時手機移動應用也會迎來一個新的時代,我們一起拭目以待吧。
相關內容
- 通訊專業想轉行計算機該學習前端、Java還是Linux雲計算?
- 大家覺得Go語言真的比Java簡單嗎?
- 安卓和JAVA那個工資更高?那個發展的方向更好?
- 我是大一軟體工程學的java,開學幾周聽了還是很迷茫都不會.有什麼方法或者網站軟體推薦,感謝各位大神?
- 虛擬機器裝Linux我還能理解,裝Windows有什麼用?
- 程式語言學到什麼程度才可以學習大資料?有哪些好的建議和需要注意的問題?
- 安卓系統和Linux(作為PC系統)都是開源的,為什麼前者的安全性不如後者呢?
- 有木有關於Java虛擬機器的書籍推薦?感激不盡?
- 對於當前網際網路環境而言,到底是學java好還是學c++好一些?
- 如果學大資料,最好學習哪種程式語言?是Java還是Python或者c++?
- 方舟編譯器是將java程式碼像C++靜態編譯,那麼為什麼安卓當時一開始為啥不用C++?
- 零基礎安卓開發起步(三)
- Android app反除錯與程式碼保護的一些基本方案
- 大廠面試真實際遇,試題你來挑戰一下?程式設計師:這個誰還不會了
- 抖音BoostMultiDex:Android低版本上首次啟動時間減少80%(一)
- Flutter呼聲越來越高,但唱衰的人依舊不少,跨平臺何時能統一?
- 打破重重阻礙,手淘如何突破native crash提升穩定性?
- 廣告分成1:9,加上開源、編譯、耀星計劃,無法後退就招招見血?
- Android開發者必知的記憶體、效能優化細節
- Android面試官:你究竟有多大的勇氣,在簡歷上寫了“精通”?