《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 模擬設(shè)計 > 業(yè)界動態(tài) > 賣手機(jī)只是小打小鬧,做生態(tài)才是華為的目標(biāo)

賣手機(jī)只是小打小鬧,做生態(tài)才是華為的目標(biāo)

2019-05-08
關(guān)鍵詞: 華為P30 編譯器 CPU 虛擬機(jī)

前一陣子,華為P30系列發(fā)布,最為明顯的升級就是相機(jī)拍照部分,外加上P20打下的基礎(chǔ),突破了自己,就算是突破了整個行業(yè),然而從長遠(yuǎn)的眼光看,華為P30的發(fā)布帶來的拍照提升只是例行升級,真正懂行的人都注意到了華為推出的“方舟編譯器”,也看出來了華為真正的技術(shù)實力。

方舟編譯器簡單來說,就是可以將高級語言比如Java,直接編譯成變成機(jī)器碼的技術(shù)。它最大的優(yōu)勢就在于繞過了安卓系統(tǒng)的VM(虛擬機(jī)),從使得應(yīng)用可以像蘋果引以為傲的iOS系統(tǒng)一樣,轉(zhuǎn)化出的機(jī)器碼可以直接由CPU運(yùn)算,從而使得運(yùn)行效率大大提升。

wx_article_20190504210544_BfFJOI.jpg

概括的話,什么事都變得很簡單,為了證明方舟編譯器的技術(shù)含量,我想還是有必要詳細(xì)介紹一下它的運(yùn)行原理。

wx_article_20190504210544_c8WfhS.jpg

經(jīng)歷過九年義務(wù)教育的我們都知道,計算機(jī)是只認(rèn)識0101這樣的二進(jìn)制代碼。對于人腦來說,直接用這樣的二進(jìn)制代碼來編程,顯然是不太現(xiàn)實的。于是匯編語言就出現(xiàn)了,屬于低級語言,只是一系列的字母指令集,后來為了實現(xiàn)更復(fù)雜的功能,高級語言誕生了,比如C語言,Java,python等等,能夠用更短的代碼實現(xiàn)更復(fù)雜的功能。

wx_article_20190504210544_heSjJc.jpg

當(dāng)然了高級語言計算機(jī)是無法直接讀取的,這里就需要用到編譯器了,而編譯器就是將一種高級語言轉(zhuǎn)譯成一種低級語言的程序,起到關(guān)鍵的“承上啟下”作用,所以編譯的復(fù)雜程度直接會影響程序的執(zhí)行效率,比如C語言比Java語言的執(zhí)行效率高,正是因為C語言編譯出來的是CPU可以直接執(zhí)行的機(jī)器碼,而Java語言則先是Java虛擬機(jī)(JVM)編譯Java語言,然后JVM再編譯成機(jī)器碼。所以多出來的這一步就會被放大,影響到應(yīng)用的運(yùn)行,這也是安卓系統(tǒng)的應(yīng)用前期卡頓的主要原因,雖然之后谷歌針對JVM做出了一系列的改進(jìn)和優(yōu)化,但還是難以徹底解決。

wx_article_20190504210544_jKwOvk.jpg

反觀蘋果的iOS系統(tǒng),直接使用Clang/LLVM來編譯出機(jī)器碼,就沒有安卓還要一個中間層那么麻煩,所以iOS如絲滑般流暢的原因也因為如此,還有一個不可忽視的因素是閉環(huán)。而安卓系統(tǒng)的底層是Linux系統(tǒng)搭建的,同時又因為安卓系統(tǒng)開源,為了解決應(yīng)對不同硬件環(huán)境的適配問題,谷歌就增加了基于JIT(動態(tài)編譯)的虛擬機(jī)Dalvik,并在Dalvik虛擬機(jī)上搭建了一個JAVA應(yīng)用框架,所有的安卓應(yīng)用都是運(yùn)行在這個虛擬機(jī)上。

當(dāng)然了谷歌也知道這樣效率不好,于是在Android 5.0版本中,使用了ART模式來替換Davlik虛擬機(jī)。而ART是一個AOT(Ahead of Time)編譯器,是指在應(yīng)用運(yùn)行前就把字節(jié)碼靜態(tài)編譯成機(jī)器碼,就避免了每次打開應(yīng)用都要虛擬機(jī)編譯的麻煩。然而只是代碼的靜態(tài)編譯,Java本身的動態(tài)特性,在執(zhí)行代碼過程中會有動態(tài)類的加載(就是使用輪子),而靜態(tài)編譯時無法預(yù)測會加載哪些動態(tài)類。

wx_article_20190504210544_KfTvGU.jpg

所以弄了半天,還是需要虛擬機(jī)的動態(tài)編譯能力。而安卓想要像iOS那樣流暢,就必須跳過虛擬機(jī),而方舟編譯器,解決的就是這個問題。

根據(jù)官方信息,華為的方舟編譯器也基于AOT編譯器,不過方舟編譯器創(chuàng)造性地靜態(tài)編譯了動態(tài)類,把所有的Java代碼都編譯成機(jī)器碼,這樣也就可以完全避開虛擬機(jī),直接編譯成機(jī)器碼在手機(jī)CPU上運(yùn)行,也就能夠有iOS系統(tǒng)一樣的高效。除了直接編譯之外,方舟編譯器也優(yōu)化了編譯算法,并且在內(nèi)存回收方面也有一定的改進(jìn),不僅是應(yīng)用,對系統(tǒng)運(yùn)行的流暢度也有很大的提升。

wx_article_20190504210544_KLd8ij.jpg

當(dāng)然了,如此重大的提升,難道谷歌就不會想到嗎。想得到,但力不從心。因為想要使用方舟編譯器,得從應(yīng)用的打包編譯上架重新開始,開發(fā)者必須按照方舟編譯器的標(biāo)準(zhǔn)重新編譯應(yīng)用安裝包,所以這并不只是安卓系統(tǒng),也需要應(yīng)用的配合才能使用,目前好像只有微博極速版做了適配。

當(dāng)然了,華為也宣布將方舟編譯器全面開源,提供完整的編程框架和應(yīng)用開發(fā)工具,將更多的開發(fā)者參與到方舟編譯器的開發(fā)和使用,共同提升整個安卓生態(tài)的體驗。方舟編譯器編譯是基于ARM指令集開發(fā)的,所以全面開源意味著其它廠商的安卓系統(tǒng)也可以使用。

wx_article_20190504210544_nevAI5.jpg

這里我們就能看出來華為對研發(fā)的投入,以及對生態(tài)的規(guī)劃,并不只是說說而已。開開發(fā)布會賣賣手機(jī)只是小打小鬧的事情,華為的目標(biāo)是全方位的生態(tài)建立。不管你是對華為這個品牌抱什么看法,但不得不承認(rèn)目前在國內(nèi)只有華為有這樣的實力去做整個產(chǎn)業(yè)上的事,去構(gòu)建屬于自己的生態(tài),方舟編譯器就是這個過程中的催化劑。


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。