8 月 9 日,華為開發(fā)者大會鴻蒙OS正式發(fā)布,這是基于微內(nèi)核的全場景分布式OS。能實現(xiàn)模塊化解耦,對應不同設備(智慧屏、穿戴設備、車機、智能音箱、手機)可彈性部署。華為消費者業(yè)務 CEO 余承東描述了華為鴻蒙 OS 的方方面面。
余承東稱,華為方舟編譯器,會通過多終端 IDE 開發(fā)環(huán)境來支撐當前的鴻蒙 OS。目前方舟編譯器支撐鴻蒙內(nèi)核,“方舟編譯器能提升60%的編譯性能”,將來鴻蒙微內(nèi)核能按需擴展,并希望用一個鴻蒙微內(nèi)核代替全部內(nèi)核。
今天,我們就聚焦華為的新貴——方舟編譯器,這個一發(fā)布就引起巨大響動的底層核心技術。方舟編譯器究竟是什么?它為什么能夠做到“青出于藍而勝于藍”,下面就讓我們帶著疑問去解讀。
01 編譯器是什么?
首先講講編譯器是什么東西吧?其實絕大多數(shù)用戶都不清楚這是什么。程序員們在寫好應用的代碼之后,在變成我們手機上安裝的應用之前,還差最后一步就是編譯。
簡單來說,編譯器就是把編程人員開發(fā)的高級語言程序,翻譯成機器可執(zhí)行的機器指令,這就是編譯器。它就像一位翻譯官,是連接程序員與機器的橋梁。
由此來看,方舟編譯器面向的是開發(fā)者的,但最終受益的還是消費者。

打個比方,說計算機是汽車,那么軟件就像汽車的操控系統(tǒng)一樣。編譯器則是汽車發(fā)動機里最核心的汽油燃燒技術,將軟件變成計算機的動力,其編譯的效率,直接決定了用戶的使用體驗。所以了解方舟編譯器之前,我們必須得首先了解 Android 操作系統(tǒng)中的編譯器的運行機制。

安卓系統(tǒng)從2008年1.0到9.0,截至目前安卓系統(tǒng)大小版本超過15個。十年發(fā)展安卓手機的體驗已經(jīng)今非昔比??缮钪羞€有很多人詬病安卓手機沒有iPhone流暢,那么安卓系統(tǒng)的程序是怎樣運行的?下面我們來闡述一下
Java的虛擬機的故事
Android 1.0剛發(fā)布的時候,使用的是一個叫Dalvik的虛擬機(Virtual Machine,簡稱 VM)里面集成了一個解釋器,每次用戶在安卓手機上運行APP時,就會喚醒解釋器,來給安卓的硬件解釋APP接下來要干什么。

這個問題嚴重拖了安卓手機的后腿,所以Android2.2版本引入了JIT機制。JIT比較聰明,當用戶在安卓手機運行APP時,會同時將用戶經(jīng)常使用的功能編譯為機器能直接執(zhí)行的機器碼,不用一句一句去翻譯。當出現(xiàn)不常用的功能時,再喚醒解釋器翻譯。

但是每次啟動APP都要重新編譯一次,加上Dalvik虛擬機性能比較落后,所以谷歌在Android 5.0版本將虛擬機從Dalvik替代成ART,同時把JIT的編譯器替代成AOT 。AOT相比JIT的好處,就是不用每次打開APP都需要先編譯一遍。但是,壞處是安裝應用慢和占用內(nèi)存空間。

在 Android 5.0 正式采用 ART 之前,Android 采用的是解釋執(zhí)行+JIT 的方式執(zhí)行 Java 代碼。在這個階段的系統(tǒng)是“邊解釋邊執(zhí)行”模式,代碼效率比較低下,當時Android給人的感覺就是卡。

目前的Android采用的是解釋執(zhí)行+JIT+AOT 的模式,但并沒有擺脫一個前提,即應用在被打包成APK的時候,采用的還是Java代碼。
JNI接口調度占用額外資源
現(xiàn)在大部分應用都是使用Java和C/C++等多種語言混合開發(fā)而成。Java和C/C++屬于兩種不同架構的語言,為了使APP正常運行,它倆之間需要互通的接口——JNI。

這就意味著手機硬件資源要分配一部分給JNI去做調度。不僅占用了硬件資源,而且這種機制本身就效率較低。
安卓內(nèi)存回收機制容易造成卡頓
當手機內(nèi)存資源不夠用的時候,安卓虛擬機就會召喚GC(Garbage Collection),讓所有手機運行的Java線程全部暫停,GC機制,無法精確控制內(nèi)存回收,所以性能較差的手機間歇的出現(xiàn)“抽搐般”的卡頓現(xiàn)象。

以上這幾個問題,一直影響著安卓手機的體驗。其中最主要的是Java 高級語言轉換機器能懂的語言,這一轉換過程直接導致了Android的卡頓。反觀iOS系統(tǒng),直接使用Clang/LLVM來編譯出機器碼,就沒有安卓還要一個中間層,也因為如此,我們感覺iOS系統(tǒng)一般更流暢。
02 方舟編譯器牛在哪? “干掉”虛擬機
方舟編譯器做的就是,將Java的所有語句統(tǒng)統(tǒng)翻譯成機器碼,最后打包成APK安裝文件。方舟編譯器最大的優(yōu)勢在于它繞過了虛擬機。簡單來說,方舟編譯器可以將高級語言(Java)直接變成機器碼,無需再通過 Android 系統(tǒng)中內(nèi)置的編譯器。
總之,方舟編譯器是完全替代了語言虛擬機的靜態(tài)編譯器,從此不再需要解釋器。相比現(xiàn)有的編譯機制有以下明顯優(yōu)勢:
1、方舟編譯器是一種靜態(tài)的編譯方式,而現(xiàn)有的安卓系統(tǒng),運行一個應用程序首先啟動虛擬機,然后讀入應用代碼逐條解釋執(zhí)行,無法做到100%做到擺脫虛擬機,這也是當前安卓陣營面臨的問題。

簡單一句話,只要是經(jīng)過編譯器編譯的應用,在應用市場上架以后,用戶下載的APK 就是編譯好的了,方舟編譯的應用在開發(fā)階段就已完成了。
2、華為方舟編譯器的靜態(tài)編譯方式可將語言里的動態(tài)特性直接翻譯成機器碼,手機安裝應用程序后可全速運行程序,徹底干掉了虛擬機,極大提升了系統(tǒng)運行效率。

方舟編譯器對于系統(tǒng)在這方面的提升,官方曾這樣描述:
一、EMUI 9.1對系統(tǒng)主要服務System Server進行靜態(tài)編譯化,帶來了系統(tǒng)流暢度提升24%,系統(tǒng)響應性能提升44%以上的收益。
二、微博極速版實現(xiàn)了靜態(tài)化編譯后,流暢度提升高達60%。通過上方演示視頻來看,經(jīng)過方舟編譯優(yōu)化的APP,在流暢度度方面的提升很明顯。
03 新的內(nèi)存垃圾回收機制
此外,方舟編譯器還帶來了新的系統(tǒng)垃圾回收機制。以往安卓的垃圾回收機制是集中回收,由于Java虛擬機的特點,系統(tǒng)會不停的地自動回收內(nèi)存垃圾,保證內(nèi)存不會溢出。

更要命的是,當內(nèi)存低于某個標準值后,它就會自動殺掉優(yōu)先級低的進程。系統(tǒng)會集中關閉被標記的多余進程,這就造成了隨機性的卡頓。相信大家遇到過這種情況,啟動游戲時,點按應用瞬間進入前會感覺莫名的卡頓,界面像是遲鈍了一下。

而方舟編譯器在這方面有什么不同,它的內(nèi)存回收機制是隨用隨回收,回收時不需要暫停應用,而是直接回收內(nèi)存垃圾,這大大提高了系統(tǒng)運行速度和效率。
小結:方舟編譯器的優(yōu)勢,可以簡單總結為以下五個方面:
1.安卓程序編譯效果更好
2.安卓應用安裝速度更快
3.APP運行速度更快
4.系統(tǒng)內(nèi)存垃圾隨用隨清,對手機硬件的要求降低
5.省電
04 十年造方舟,為安卓提速為真,支撐鴻蒙也為實
十年磨一劍,沒錯,華為方舟編譯器準備了十年之久。2009年,華為啟動5G基礎技術研究的同時,開始創(chuàng)建編譯組,第一批海內(nèi)外研究人員加入。
2013年,華為推出面向基站領域的自研編譯器HCC,并正式提出編譯器框架構想。
2014年,眾多海內(nèi)外專家加入華為,方舟項目正式啟動。同時,編譯器領域的頂級大佬,周志德(Fred Chow)的加入大大增強了研發(fā)實力
2016年,成立編譯器與編程語言實驗室。2019年,華為方舟編譯器正式面世!
方舟編譯器既能統(tǒng)一適配安卓機器語言,自然也能適配成自家系統(tǒng)的機器語言——鴻蒙OS,方舟編譯器為“安卓提速”為真,但能“支撐鴻蒙”也為實,它完全可稱為讓開發(fā)者從安卓到鴻蒙過渡的“諾亞方舟”。
05對外開源 構建生態(tài)
據(jù)悉,方舟編譯器也將開放給第三方合作伙伴。其后續(xù)會在 2019 年 11 月的綠盟開發(fā)者大會實現(xiàn)完整方舟編譯器代碼開源,讓廣大的應用開發(fā)者、手機廠商參與,共同構建開發(fā)者生態(tài),使安卓體系變得更加完整強大。
未來方舟編譯器是否能成功,還要看后續(xù)完整生態(tài)的搭建。希望開發(fā)者積極參與進來,最終給消費者帶來更為極致的體驗。
總結:
從方舟編譯器我們就能看出華為對研發(fā)的投入,以及對未來生態(tài)搭建的規(guī)劃,或許,想要做一個操作系統(tǒng)并不難,比如阿里云OS,但難的是未來完整生態(tài)的構建。
無論怎么看待華為,目前,在國內(nèi)也只有它有實力去干這件事情,并不只是說說而已,華為的終極目標很明顯,就是在未來搭建全方位的生態(tài)。我們期待這項技術能夠普及開來,促進Android體系更加強大,也希望華為能在未來帶給我們更多驚喜。
-
華為
+關注
關注
218文章
36087瀏覽量
262335 -
編譯器
+關注
關注
1文章
1672瀏覽量
51766 -
安卓
+關注
關注
5文章
2185瀏覽量
60386 -
鴻蒙系統(tǒng)
+關注
關注
183文章
2642瀏覽量
69959 -
方舟編譯器
+關注
關注
0文章
63瀏覽量
803
發(fā)布評論請先 登錄
安卓主板定制_MTK聯(lián)發(fā)科安卓系統(tǒng)主板PCBA方案開發(fā)
性能突破 | SpacemiT-X60 在 LLVM 編譯器上實現(xiàn) 16% 顯著提升
開源鴻蒙技術大會2025丨編譯器與編程語言分論壇:語言驅動系統(tǒng)創(chuàng)新,編譯賦能生態(tài)繁榮
GCC編譯器,怎么才能實現(xiàn)c文件中未被調用的函數(shù),不會被編譯呢?
邊緣設備AI部署:編譯器如何實現(xiàn)輕量化與高性能?
編譯器功能安全驗證的關鍵要素
兆松科技ZCC編譯器全面支持芯來科技NA系列處理器
RISC-V架構下的編譯器自動向量化
華為方舟編譯器詳細解讀 真的比安卓快嗎
評論