8 月 9 日,華為開(kāi)發(fā)者大會(huì)鴻蒙OS正式發(fā)布,這是基于微內(nèi)核的全場(chǎng)景分布式OS。能實(shí)現(xiàn)模塊化解耦,對(duì)應(yīng)不同設(shè)備(智慧屏、穿戴設(shè)備、車(chē)機(jī)、智能音箱、手機(jī))可彈性部署。華為消費(fèi)者業(yè)務(wù) CEO 余承東描述了華為鴻蒙 OS 的方方面面。
余承東稱(chēng),華為方舟編譯器,會(huì)通過(guò)多終端 IDE 開(kāi)發(fā)環(huán)境來(lái)支撐當(dāng)前的鴻蒙 OS。目前方舟編譯器支撐鴻蒙內(nèi)核,“方舟編譯器能提升60%的編譯性能”,將來(lái)鴻蒙微內(nèi)核能按需擴(kuò)展,并希望用一個(gè)鴻蒙微內(nèi)核代替全部?jī)?nèi)核。
今天,我們就聚焦華為的新貴——方舟編譯器,這個(gè)一發(fā)布就引起巨大響動(dòng)的底層核心技術(shù)。方舟編譯器究竟是什么?它為什么能夠做到“青出于藍(lán)而勝于藍(lán)”,下面就讓我們帶著疑問(wèn)去解讀。
01 編譯器是什么?
首先講講編譯器是什么東西吧?其實(shí)絕大多數(shù)用戶(hù)都不清楚這是什么。程序員們?cè)趯?xiě)好應(yīng)用的代碼之后,在變成我們手機(jī)上安裝的應(yīng)用之前,還差最后一步就是編譯。
簡(jiǎn)單來(lái)說(shuō),編譯器就是把編程人員開(kāi)發(fā)的高級(jí)語(yǔ)言程序,翻譯成機(jī)器可執(zhí)行的機(jī)器指令,這就是編譯器。它就像一位翻譯官,是連接程序員與機(jī)器的橋梁。
由此來(lái)看,方舟編譯器面向的是開(kāi)發(fā)者的,但最終受益的還是消費(fèi)者。
打個(gè)比方,說(shuō)計(jì)算機(jī)是汽車(chē),那么軟件就像汽車(chē)的操控系統(tǒng)一樣。編譯器則是汽車(chē)發(fā)動(dòng)機(jī)里最核心的汽油燃燒技術(shù),將軟件變成計(jì)算機(jī)的動(dòng)力,其編譯的效率,直接決定了用戶(hù)的使用體驗(yàn)。所以了解方舟編譯器之前,我們必須得首先了解 Android 操作系統(tǒng)中的編譯器的運(yùn)行機(jī)制。
安卓系統(tǒng)從2008年1.0到9.0,截至目前安卓系統(tǒng)大小版本超過(guò)15個(gè)。十年發(fā)展安卓手機(jī)的體驗(yàn)已經(jīng)今非昔比??缮钪羞€有很多人詬病安卓手機(jī)沒(méi)有iPhone流暢,那么安卓系統(tǒng)的程序是怎樣運(yùn)行的?下面我們來(lái)闡述一下
Java的虛擬機(jī)的故事
Android 1.0剛發(fā)布的時(shí)候,使用的是一個(gè)叫Dalvik的虛擬機(jī)(Virtual Machine,簡(jiǎn)稱(chēng) VM)里面集成了一個(gè)解釋器,每次用戶(hù)在安卓手機(jī)上運(yùn)行APP時(shí),就會(huì)喚醒解釋器,來(lái)給安卓的硬件解釋APP接下來(lái)要干什么。
這個(gè)問(wèn)題嚴(yán)重拖了安卓手機(jī)的后腿,所以Android2.2版本引入了JIT機(jī)制。JIT比較聰明,當(dāng)用戶(hù)在安卓手機(jī)運(yùn)行APP時(shí),會(huì)同時(shí)將用戶(hù)經(jīng)常使用的功能編譯為機(jī)器能直接執(zhí)行的機(jī)器碼,不用一句一句去翻譯。當(dāng)出現(xiàn)不常用的功能時(shí),再喚醒解釋器翻譯。
但是每次啟動(dòng)APP都要重新編譯一次,加上Dalvik虛擬機(jī)性能比較落后,所以谷歌在Android 5.0版本將虛擬機(jī)從Dalvik替代成ART,同時(shí)把JIT的編譯器替代成AOT 。AOT相比JIT的好處,就是不用每次打開(kāi)APP都需要先編譯一遍。但是,壞處是安裝應(yīng)用慢和占用內(nèi)存空間。
在 Android 5.0 正式采用 ART 之前,Android 采用的是解釋執(zhí)行+JIT 的方式執(zhí)行 Java 代碼。在這個(gè)階段的系統(tǒng)是“邊解釋邊執(zhí)行”模式,代碼效率比較低下,當(dāng)時(shí)Android給人的感覺(jué)就是卡。
目前的Android采用的是解釋執(zhí)行+JIT+AOT 的模式,但并沒(méi)有擺脫一個(gè)前提,即應(yīng)用在被打包成APK的時(shí)候,采用的還是Java代碼。
JNI接口調(diào)度占用額外資源
現(xiàn)在大部分應(yīng)用都是使用Java和C/C++等多種語(yǔ)言混合開(kāi)發(fā)而成。Java和C/C++屬于兩種不同架構(gòu)的語(yǔ)言,為了使APP正常運(yùn)行,它倆之間需要互通的接口——JNI。
這就意味著手機(jī)硬件資源要分配一部分給JNI去做調(diào)度。不僅占用了硬件資源,而且這種機(jī)制本身就效率較低。
安卓?jī)?nèi)存回收機(jī)制容易造成卡頓
當(dāng)手機(jī)內(nèi)存資源不夠用的時(shí)候,安卓虛擬機(jī)就會(huì)召喚GC(Garbage Collection),讓所有手機(jī)運(yùn)行的Java線(xiàn)程全部暫停,GC機(jī)制,無(wú)法精確控制內(nèi)存回收,所以性能較差的手機(jī)間歇的出現(xiàn)“抽搐般”的卡頓現(xiàn)象。
以上這幾個(gè)問(wèn)題,一直影響著安卓手機(jī)的體驗(yàn)。其中最主要的是Java 高級(jí)語(yǔ)言轉(zhuǎn)換機(jī)器能懂的語(yǔ)言,這一轉(zhuǎn)換過(guò)程直接導(dǎo)致了Android的卡頓。反觀iOS系統(tǒng),直接使用Clang/LLVM來(lái)編譯出機(jī)器碼,就沒(méi)有安卓還要一個(gè)中間層,也因?yàn)槿绱?,我們感覺(jué)iOS系統(tǒng)一般更流暢。
02 方舟編譯器牛在哪? “干掉”虛擬機(jī)
方舟編譯器做的就是,將Java的所有語(yǔ)句統(tǒng)統(tǒng)翻譯成機(jī)器碼,最后打包成APK安裝文件。方舟編譯器最大的優(yōu)勢(shì)在于它繞過(guò)了虛擬機(jī)。簡(jiǎn)單來(lái)說(shuō),方舟編譯器可以將高級(jí)語(yǔ)言(Java)直接變成機(jī)器碼,無(wú)需再通過(guò) Android 系統(tǒng)中內(nèi)置的編譯器。
總之,方舟編譯器是完全替代了語(yǔ)言虛擬機(jī)的靜態(tài)編譯器,從此不再需要解釋器。相比現(xiàn)有的編譯機(jī)制有以下明顯優(yōu)勢(shì):
1、方舟編譯器是一種靜態(tài)的編譯方式,而現(xiàn)有的安卓系統(tǒng),運(yùn)行一個(gè)應(yīng)用程序首先啟動(dòng)虛擬機(jī),然后讀入應(yīng)用代碼逐條解釋執(zhí)行,無(wú)法做到100%做到擺脫虛擬機(jī),這也是當(dāng)前安卓陣營(yíng)面臨的問(wèn)題。
簡(jiǎn)單一句話(huà),只要是經(jīng)過(guò)編譯器編譯的應(yīng)用,在應(yīng)用市場(chǎng)上架以后,用戶(hù)下載的APK 就是編譯好的了,方舟編譯的應(yīng)用在開(kāi)發(fā)階段就已完成了。
2、華為方舟編譯器的靜態(tài)編譯方式可將語(yǔ)言里的動(dòng)態(tài)特性直接翻譯成機(jī)器碼,手機(jī)安裝應(yīng)用程序后可全速運(yùn)行程序,徹底干掉了虛擬機(jī),極大提升了系統(tǒng)運(yùn)行效率。
方舟編譯器對(duì)于系統(tǒng)在這方面的提升,官方曾這樣描述:
一、EMUI 9.1對(duì)系統(tǒng)主要服務(wù)System Server進(jìn)行靜態(tài)編譯化,帶來(lái)了系統(tǒng)流暢度提升24%,系統(tǒng)響應(yīng)性能提升44%以上的收益。
二、微博極速版實(shí)現(xiàn)了靜態(tài)化編譯后,流暢度提升高達(dá)60%。通過(guò)上方演示視頻來(lái)看,經(jīng)過(guò)方舟編譯優(yōu)化的APP,在流暢度度方面的提升很明顯。
03 新的內(nèi)存垃圾回收機(jī)制
此外,方舟編譯器還帶來(lái)了新的系統(tǒng)垃圾回收機(jī)制。以往安卓的垃圾回收機(jī)制是集中回收,由于Java虛擬機(jī)的特點(diǎn),系統(tǒng)會(huì)不停的地自動(dòng)回收內(nèi)存垃圾,保證內(nèi)存不會(huì)溢出。
更要命的是,當(dāng)內(nèi)存低于某個(gè)標(biāo)準(zhǔn)值后,它就會(huì)自動(dòng)殺掉優(yōu)先級(jí)低的進(jìn)程。系統(tǒng)會(huì)集中關(guān)閉被標(biāo)記的多余進(jìn)程,這就造成了隨機(jī)性的卡頓。相信大家遇到過(guò)這種情況,啟動(dòng)游戲時(shí),點(diǎn)按應(yīng)用瞬間進(jìn)入前會(huì)感覺(jué)莫名的卡頓,界面像是遲鈍了一下。
而方舟編譯器在這方面有什么不同,它的內(nèi)存回收機(jī)制是隨用隨回收,回收時(shí)不需要暫停應(yīng)用,而是直接回收內(nèi)存垃圾,這大大提高了系統(tǒng)運(yùn)行速度和效率。
小結(jié):方舟編譯器的優(yōu)勢(shì),可以簡(jiǎn)單總結(jié)為以下五個(gè)方面:
1.安卓程序編譯效果更好
2.安卓應(yīng)用安裝速度更快
3.APP運(yùn)行速度更快
4.系統(tǒng)內(nèi)存垃圾隨用隨清,對(duì)手機(jī)硬件的要求降低
5.省電
04 十年造方舟,為安卓提速為真,支撐鴻蒙也為實(shí)
十年磨一劍,沒(méi)錯(cuò),華為方舟編譯器準(zhǔn)備了十年之久。2009年,華為啟動(dòng)5G基礎(chǔ)技術(shù)研究的同時(shí),開(kāi)始創(chuàng)建編譯組,第一批海內(nèi)外研究人員加入。
2013年,華為推出面向基站領(lǐng)域的自研編譯器HCC,并正式提出編譯器框架構(gòu)想。
2014年,眾多海內(nèi)外專(zhuān)家加入華為,方舟項(xiàng)目正式啟動(dòng)。同時(shí),編譯器領(lǐng)域的頂級(jí)大佬,周志德(Fred Chow)的加入大大增強(qiáng)了研發(fā)實(shí)力
2016年,成立編譯器與編程語(yǔ)言實(shí)驗(yàn)室。2019年,華為方舟編譯器正式面世!
方舟編譯器既能統(tǒng)一適配安卓機(jī)器語(yǔ)言,自然也能適配成自家系統(tǒng)的機(jī)器語(yǔ)言——鴻蒙OS,方舟編譯器為“安卓提速”為真,但能“支撐鴻蒙”也為實(shí),它完全可稱(chēng)為讓開(kāi)發(fā)者從安卓到鴻蒙過(guò)渡的“諾亞方舟”。
05對(duì)外開(kāi)源 構(gòu)建生態(tài)
據(jù)悉,方舟編譯器也將開(kāi)放給第三方合作伙伴。其后續(xù)會(huì)在 2019 年 11 月的綠盟開(kāi)發(fā)者大會(huì)實(shí)現(xiàn)完整方舟編譯器代碼開(kāi)源,讓廣大的應(yīng)用開(kāi)發(fā)者、手機(jī)廠商參與,共同構(gòu)建開(kāi)發(fā)者生態(tài),使安卓體系變得更加完整強(qiáng)大。
未來(lái)方舟編譯器是否能成功,還要看后續(xù)完整生態(tài)的搭建。希望開(kāi)發(fā)者積極參與進(jìn)來(lái),最終給消費(fèi)者帶來(lái)更為極致的體驗(yàn)。
總結(jié):
從方舟編譯器我們就能看出華為對(duì)研發(fā)的投入,以及對(duì)未來(lái)生態(tài)搭建的規(guī)劃,或許,想要做一個(gè)操作系統(tǒng)并不難,比如阿里云OS,但難的是未來(lái)完整生態(tài)的構(gòu)建。
無(wú)論怎么看待華為,目前,在國(guó)內(nèi)也只有它有實(shí)力去干這件事情,并不只是說(shuō)說(shuō)而已,華為的終極目標(biāo)很明顯,就是在未來(lái)搭建全方位的生態(tài)。我們期待這項(xiàng)技術(shù)能夠普及開(kāi)來(lái),促進(jìn)Android體系更加強(qiáng)大,也希望華為能在未來(lái)帶給我們更多驚喜。
-
華為
+關(guān)注
關(guān)注
215文章
34165瀏覽量
249692 -
編譯器
+關(guān)注
關(guān)注
1文章
1602瀏覽量
48916 -
安卓
+關(guān)注
關(guān)注
5文章
2108瀏覽量
56747 -
鴻蒙系統(tǒng)
+關(guān)注
關(guān)注
183文章
2629瀏覽量
65847 -
方舟編譯器
+關(guān)注
關(guān)注
0文章
60瀏覽量
175
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論