0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

華為方舟編譯器詳細(xì)解讀 真的比安卓快嗎

454398 ? 來(lái)源:工程師吳畏 ? 2019-08-12 08:58 ? 次閱讀

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)帶給我們更多驚喜。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 華為
    +關(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
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    AI編譯器技術(shù)剖析

    隨著人工智能技術(shù)的飛速發(fā)展,AI編譯器作為一種新興的編譯技術(shù)逐漸進(jìn)入人們的視野。AI編譯器不僅具備傳統(tǒng)編譯器的功能,如將高級(jí)語(yǔ)言編寫(xiě)的源代碼轉(zhuǎn)換為機(jī)器可執(zhí)行的代碼,還融入了人工智能技術(shù)
    的頭像 發(fā)表于 07-17 18:28 ?1244次閱讀

    人工智能編譯器與傳統(tǒng)編譯器的區(qū)別

    人工智能編譯器(AI編譯器)與傳統(tǒng)編譯器在多個(gè)方面存在顯著的差異。這些差異主要體現(xiàn)在設(shè)計(jì)目標(biāo)、功能特性、優(yōu)化策略、適用范圍以及技術(shù)復(fù)雜性等方面。以下是對(duì)兩者區(qū)別的詳細(xì)探討,旨在全面解析
    的頭像 發(fā)表于 07-17 18:19 ?1345次閱讀

    Meta發(fā)布基于Code Llama的LLM編譯器

    近日,科技巨頭Meta在其X平臺(tái)上正式宣布推出了一款革命性的LLM編譯器,這一模型家族基于Meta Code Llama構(gòu)建,并融合了先進(jìn)的代碼優(yōu)化和編譯器功能。LLM編譯器的推出,標(biāo)志著Meta在人工智能領(lǐng)域的又一重大突破,將
    的頭像 發(fā)表于 06-29 17:54 ?1325次閱讀

    SEGGER編譯器優(yōu)化和安全技術(shù)介紹 支持最新C和C++語(yǔ)言

    代碼生成,SEGGER編譯器生成非常小的代碼,非常適合內(nèi)存受限的環(huán)境,而不會(huì)犧牲執(zhí)行速度。 2)?速度優(yōu)化:在最高優(yōu)化級(jí)別,SEGGER編譯器生成盡可能的代碼,確保您的應(yīng)用程序以峰值性能運(yùn)行
    的頭像 發(fā)表于 06-04 15:31 ?1191次閱讀
    SEGGER<b class='flag-5'>編譯器</b>優(yōu)化和安全技術(shù)介紹 支持最新C和C++語(yǔ)言

    純血鴻蒙系統(tǒng),拿什么與、iOS?

    、數(shù)碼、車(chē)載等等一系列生態(tài)閉環(huán)。 而華為鴻蒙是全棧自研底座,從AI大模型、AI框架、安全隱私、集成開(kāi)發(fā)環(huán)境、設(shè)計(jì)系統(tǒng)、編程框體、編譯器、編程語(yǔ)言和文件系統(tǒng),到操作系統(tǒng)內(nèi)核。去掉了傳統(tǒng)的AOSP 代碼
    發(fā)表于 02-21 21:04

    QT開(kāi)發(fā)學(xué)習(xí)筆記1(安裝交叉編譯器

    QT安裝交叉編譯器
    的頭像 發(fā)表于 02-18 10:02 ?715次閱讀
    QT開(kāi)發(fā)學(xué)習(xí)筆記1(安裝交叉<b class='flag-5'>編譯器</b>)

    華為鴻蒙系統(tǒng)怎么樣 華為鴻蒙系統(tǒng)和系統(tǒng)的區(qū)別

    和穩(wěn)定性。與此同時(shí),鴻蒙系統(tǒng)與系統(tǒng)在架構(gòu)、功能和生態(tài)系統(tǒng)方面都存在一些區(qū)別和特點(diǎn),下面將詳細(xì)探討這些方面的差異。 首先,華為鴻蒙系統(tǒng)在架構(gòu)上與
    的頭像 發(fā)表于 02-02 14:54 ?1385次閱讀

    華為舉辦鴻蒙生態(tài)千帆啟航儀式,余承東公布HarmonyOS NEXT開(kāi)放申請(qǐng)

    據(jù)余承東介紹,為實(shí)現(xiàn)核心競(jìng)爭(zhēng)力的突破,華為通過(guò)多年的努力構(gòu)建出一套包含鴻蒙內(nèi)核、ArkTS/倉(cāng)頡編程語(yǔ)言、方舟編譯器/畢昇編譯器、ArkUI以及盤(pán)古AI大模型等在內(nèi)的完整生態(tài)體系。
    的頭像 發(fā)表于 01-19 09:34 ?689次閱讀

    Triton編譯器的原理和性能

    Triton是一種用于編寫(xiě)高效自定義深度學(xué)習(xí)原語(yǔ)的語(yǔ)言和編譯器。Triton的目的是提供一個(gè)開(kāi)源環(huán)境,以CUDA更高的生產(chǎn)力編寫(xiě)快速代碼,但也其他現(xiàn)有DSL具有更大的靈活性。Triton已被采用
    的頭像 發(fā)表于 12-16 11:22 ?2307次閱讀
    Triton<b class='flag-5'>編譯器</b>的原理和性能

    TVM編譯器的整體架構(gòu)和基本方法

    有將近兩個(gè)月沒(méi)有學(xué)習(xí)一些新東西,更新一下博客了。一直在忙公司的一個(gè)項(xiàng)目,是做一款支持LSTM和RNN的通用架構(gòu)加速I(mǎi)P。自己恰好負(fù)責(zé)指令編譯工作,雖然開(kāi)始的指令比較粗糙,沒(méi)有一套完整的編譯器架構(gòu)
    的頭像 發(fā)表于 11-30 09:36 ?1943次閱讀
    TVM<b class='flag-5'>編譯器</b>的整體架構(gòu)和基本方法

    編譯器的優(yōu)化選項(xiàng)

    一個(gè)程序首先要保證正確性,在保證正確性的基礎(chǔ)上,性能也是一個(gè)重要的考量。要編寫(xiě)高性能的程序,第一,必須選擇合適的算法和數(shù)據(jù)結(jié)構(gòu);第二,應(yīng)該編寫(xiě)編譯器能夠有效優(yōu)化以轉(zhuǎn)換成高效可執(zhí)行代碼的源代碼,要做到
    的頭像 發(fā)表于 11-24 15:37 ?767次閱讀
    <b class='flag-5'>編譯器</b>的優(yōu)化選項(xiàng)

    嵌入式j(luò)avascript編譯器的設(shè)計(jì)與實(shí)現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《嵌入式j(luò)avascript編譯器的設(shè)計(jì)與實(shí)現(xiàn).pdf》資料免費(fèi)下載
    發(fā)表于 10-30 11:29 ?0次下載
    嵌入式j(luò)avascript<b class='flag-5'>編譯器</b>的設(shè)計(jì)與實(shí)現(xiàn)

    新版編譯器的設(shè)計(jì)思路和優(yōu)化方法

    小程序編譯器在小程序開(kāi)發(fā)、預(yù)覽、發(fā)布各個(gè)階段都需要使用,因此編譯器性能會(huì)直接影響到開(kāi)發(fā)者開(kāi)發(fā)效率,也會(huì)影響到開(kāi)發(fā)者工具的使用體驗(yàn)。 由于舊版的編譯器(基于 webpack4)在構(gòu)建大型項(xiàng)目時(shí)會(huì)很慢,內(nèi)存占用也高,一直被開(kāi)發(fā)者吐槽
    發(fā)表于 10-13 11:21 ?264次閱讀
    新版<b class='flag-5'>編譯器</b>的設(shè)計(jì)思路和優(yōu)化方法

    嵌入式開(kāi)發(fā)中的C語(yǔ)言編譯器設(shè)置

    編譯器的語(yǔ)義檢查很弱小,甚至還會(huì)“掩蓋”錯(cuò)誤?,F(xiàn)代的編譯器設(shè)計(jì)是件浩瀚的工程,為了讓編譯器設(shè)計(jì)簡(jiǎn)單一些,目前幾乎所有編譯器的語(yǔ)義檢查都比較弱小。為了獲得更快的執(zhí)行效率,C語(yǔ)言被設(shè)計(jì)的足
    發(fā)表于 10-11 12:43 ?584次閱讀

    OpenHarmony 的js引擎用的是方舟編譯器

    OpenHarmony 的js引擎用的是方舟編譯器嗎?方舟編譯器不是用來(lái)編譯嗎?
    發(fā)表于 10-09 09:32