efimztag82308
關於華為方舟編譯器的相關信息,在2019年4月11日的華為P30系列發佈會上就已經講得比較清楚了。由於是首次面世,大家存在的疑問較多,特別是對於普通用戶來講,懂得的就更少了,今天針對這個問題,給大家講講方舟編譯器。
1、什麼是方舟編譯器,如何提升性能
在介紹方舟編譯器前不得不先說說安卓操作系統。都知道在安卓系統上面運行應用程序有一個通病,那就是效率低。對此,安卓也經過多個版本的迭代,做了多次改善,但都無法達到最佳效果。安卓應用程序是運行在java虛擬機上面的,程序在運行前,需要先將代碼編譯為機器可識別的指令,然後再執行。就會出現在程序運行前機器有較多的工作要做,所以就存在效率低的問題了。
而華為方舟編譯器的優勢在於,繞過了java虛擬機。方舟編譯的的做法是,將編譯過程放到了應用程序開發端,也就是說,當開發者完成程序開發後,打包前就將程序編譯為機器可識別的語言。然後將應用商家到應用商店,用戶安裝的就是已編譯好的程序了,打開即可直接運行。
與此同時,在方舟編譯器的環境下,由於改善了內存回收機制,採用隨時用隨時回收的方式,從而大大提升了手機性能。
2、用戶手機上需要安裝方舟編譯器嗎?
目前,方舟編譯器是在華為的EMUI9.1系統內置,華為手機用戶如果能成功更新到支持方舟編譯的版本就有該功能。方舟編譯器是屬於系統組件部分的應用,所以,並不是所有手機都可以直接安裝的。對於華為方面,需要進行大量測試、完善後才會支持更多機型。而且,對於華為自主品牌的支持都需要很多時間去處理,所以,其他品牌的手機可能會更晚才能支持。
所以,不管是華為的手機用戶,還是其他品牌的手機用戶,只有在官方通知說支持方舟編譯器,更新系統完成升級以後,才會有方舟編譯器的功能。用戶不用直接安裝方舟編譯器。
前面我們講到,方舟編譯器是讓應用在開發完成後、打包前編譯程序。所以,若是開發者的話,應該會有對應的開發端工具,這個工具會安裝在開發這的開發環境下的。而作為用戶的話,就不用考慮這個,只需要使用程序即可。
3、方舟編譯器是否會開源?
當時在P30發佈會上,餘承東講解完方舟編譯器就提到過在2019年就會實現全面開源,並呼籲廣大應用開發商儘早使用。
我們知道,如今華為計劃發佈自主研發的手機操作系統。對於方舟編譯器的開源,其實也是為了將來構建軟件生態。據華為方面的講解,開發商對於新系統的支持,並不會增加太大開發成本,只需在原有程序基礎上,增加對方舟編譯器的編譯打包即可。
現在扔出於內測狀態,並未完全開放,但大部分華為(含榮耀)的手機都可以更新到EMUI9.1,並且支持方舟編譯器。我的榮耀手機已經體驗了二十多天了,總統感覺性能方面確實有所提升,除了耗電有點快之外,其他的問題並不多。
碼農聊科技
感謝您的閱讀!
方舟編譯器到底是什麼?有的人認為它是App,只要安裝以後,手機就能迅速提升性能,提升應用響應速度;有的人認為它是系統,覺得它是和安卓系統一樣的系統,通過刷機才能使用。
然而,方舟編譯器不是手機的APP,也不是和安卓系統一樣的操作系統。它是一種編譯器,通過對底層系統進行靜態編譯,提升流暢度。在下圖可以看到:
- 現有的安卓系統通過源程序打包成APK, 然後在手機中進行安裝運行。在運行過程中通過解釋器和JIT進行逐句解釋,並且進行逐段的編譯執行,通過複雜的編編譯編執行,完成指令。
- 而方舟編譯器在源程序階段就對APK進行了靜態的編譯。然後在安裝到手機後,直接運行,不需要進行編譯。
所以,方舟編譯器可以提升Android系統內應用的編譯效率,使用方舟編譯器最終將提升24%的系統操作流暢度,提升44%的系統響應能力,以及提升60%的三方應用操作流暢度,在測評中,20款應用打開時間,榮耀20Pro94秒。更為關鍵的是,在前5名中華為p30系列業在其中。
方舟編譯器是在系統升級到EMUI9.1後,華為已經將華為的系統進行了新的編譯。而第三方應用需要後期開發商使用方舟編譯器編譯才能使用,目前只有微博極速版,不過隨著時間的推移,我們相信越來越多的App,將會使用方舟編譯器進行編譯,我們打開應用的速度會提升!
LeoGo科技
看了下面不少朋友的回答,大部分都答偏了。
首先亮結論:方舟編譯器不會安裝在消費者的手機上。
下面來從以下幾個維度說明原因。
1. 編譯器是什麼?
首先要明確的是:編譯器是一個通用概念,它不是僅僅針對手機,最早它的對象是計算機。
編譯器就相當於一個翻譯官,它的作用就是將高級語言(比如Java)編寫的代碼,轉換成在操作系統(比如微軟的Windows 10)上可以直接運行的二進制程序(比如QQ.exe)。
1.1 為什麼要轉換成二進制程序,才能在計算機上運行呢?
因為計算機系統的本質就是一堆開關,通過“開關”狀態的改變——閉、合,來觸發相應物理特性的變化(電平變化、磁性變化等),達到相互通信的等價效果。而閉、合這兩種狀態正好可以對應1和0兩個數,這樣計算機系統就和表示1和0的二進制聯繫起來了。
無論是CPU,還是內存、鼠標、鍵盤、硬盤、光盤……它們都基於上述基本原理,筆者的專欄撰寫了不少文章,詳細介紹了背後的實現方式。
1.2 編譯器 vs 解釋器
現實世界中,常見的翻譯有兩種形式:一種是一次性全部翻譯,比如翻譯的文學著作;
另一種是同聲傳譯,同聲傳譯是一種實時翻譯,主講人說一句或者幾句,翻譯者同步翻譯出來。
回到編譯的世界,前者對應編譯器,後者對應解釋器。
編譯器說白了就是一次性把所有的代碼翻譯成目標平臺的二進制,然後運行的時候,直接全速運行。
解釋器則是邊翻譯邊運行:讀一條或者幾條語句,翻譯成對應的二進制,然後運行這一部分;接著再讀接下來的一條或者幾條語句,翻譯成對應的二進制,然後再運行接下來的這一部分……以此類推。
從上面的描述可以看出,從最終的運行效率上看,編譯器的方式應該是遠遠超過解釋器的,畢竟前者是一次性得到所有的二進制,這樣運行的時候就是一股腦地往前衝;而解釋器則是邊翻譯邊運行,速度上比應該是要慢不少。
除此之外,因為編譯器是一次性翻譯,所以它可以縱觀全局,找出可以複用、優化的部分,然後加以綜合,便於得到全局最優的二進制結果;而解釋器由於是邊翻譯邊運行,是一種局部行為,不利於進行全局把控、優化。
傳統Java的運行是基於JVM(Java虛擬機)的,JVM其實就是一個加強版的解釋器。它引入了JIT及其變種技術。這個技術名詞上看上去高大上,其實原理說白了很簡單:
我們都知道現實世界都遵循“二八原則”,即:任何領域,少部分的佔比貢獻或者佔據了絕大部分的價值或資源。這個原則在代碼領域也同樣適用:
有一些代碼比較“熱門”,會被不斷地重用或者調用,比如Java語言裡熱門的類、方法等。這樣在翻譯它們的時候,把它們緩存起來,這樣解釋器再次遇到這些代碼的時候,就不用重新再翻譯一遍,直接從緩存裡取出翻譯的結果來就好了。
當然,為了取得更好的優化結果,我們還可以將顆粒度做得更小,比方說我們可以把方法中被頻繁調用的循環語句的翻譯結果緩存起來。
1.3 為什麼Java要基於解釋器技術的JVM呢?
既然JVM基於解釋器技術,天生就比較慢,那為什麼Java還要執著於這種模式20多年呢?或者換句話說,自從Java1995年左右誕生,直到現在,除了華為,難道就沒有其他公司想到拋棄JVM,直接採用編譯器技術,直接將Java代碼編譯成原生二進制呢?
基於虛擬機運行的高級語言,比如Java,從代碼到最終的二進制執行,其實就是兩個階段:
第一個階段:代碼->中間代碼(字節碼)
第二個階段:中間代碼(字節碼)->二進制
有小夥伴就會挑戰了:為什麼非要搞出一箇中間代碼(字節碼)呢?這個其實來自Java這樣的高級語言的市場營銷口號:Wrtie once,Run everywhere(一次編寫、到處運行)。
通過Java編譯器(Javac)將代碼編譯成標準的中間代碼(字節碼)之後,就可以將它部署到任何硬件平臺上,只要該硬件平臺上有對應的解釋器將它在運行時翻譯成對應的目標二進制,然後就可以運行了。
通過這種策略,只要每一個硬件平臺上有對應的解釋器,保證從中間代碼(字節碼)翻譯到二進制的運行效果都一樣,那麼程序員只用寫一套代碼就完事了。
更重要的是:只要對中間代碼(字節碼)的格式、含義等進行了明確的規定、形成規範,那麼開發對應硬件平臺上的解釋器,這個工作就可以交給不同的專業公司去做,從社會分工上也極大提高了效率:
一些公司專注寫上層應用程序代碼,一些公司專注開發第一個階段(代碼->中間代碼)的編譯器,一些公司專注制定中間代碼(字節碼)的規範,另一些公司可以專注開發不同硬件平臺上的解釋器——有3家硬件平臺,就可以交給3家公司去做……
說得再通俗一點就是:創造了更多的就業崗位、大家都有飯吃:)
用流行的行話來說,就是建生態。
如果幹掉JVM,那麼:
從專注制定中間代碼(字節碼)規範的公司角度看:
我的飯碗沒了!而且我最生氣,在之前的生態中,我的話語權最高,現在我直接被華麗麗地無視了!而且在現實世界中,制定規範的公司往往就是發明和營銷該語言的公司,它的感受可想而知。
從專注開發第一個階段(代碼->中間代碼)編譯器的公司和專注開發第二個階段(中間代碼->二進制)解釋器的公司角度看:
沒我啥事了,我的飯碗沒了——就算幹掉JVM的新技術中仍然有中間代碼的變種,那我也得重新熟悉新變種,之前開發的東西都得改,這都是成本和風險。
在華為之前,歷史上是否有嘗試幹掉JVM的公司呢?
答案是肯定的。
Java在1995被SUN發明出來之後,運行效率一直被詬病,1997年前後Java JIT技術開始被追捧。Symantec在打敗了Borland等競爭對手、取得了JIT 編譯器表面上的優勢之後,立刻把重點放在了開發直接把 Java中間代碼(字節碼)編譯成原生應用程序的原生Java 編譯器。Symantec 成功開發出了這個原生Java編譯器之後,加入到當時它最熱銷的集成開發環境Visual Café 中,成為一項吸引人的功能。不過很快地這個功能卻引起了許多Java 使用者的批評,因為他們認為這違反了Java“一次編寫、到處運行”的精神,如此一來廠商必須為每一個不同的平臺開發原生Java 編譯器,這會造成Java 應用程序在不同的平臺執行的反應不一致的現象,又陷入C/C++語言開發的應用程序在不同的平臺表現不一的相同問題。後來連發明Java的SUN也不贊成這種做法,當然這是因為SUN想力推自己的HotSpot編譯器技術。因此原生Java編譯器在風行了一陣短暫的時間之後就不再吸引人注意了。
下面再講一個哪怕沒有幹掉JVM,只是魔改了JVM也被“修理”的例子。
比爾蓋茨在挖到了Borland公司的首席架構師、被業內稱為“編譯器之神”的Anders Hejlsberg之後,在1996年11月發佈了Microsoft Visual J++,該Java編譯器的性能超越了同期的所有競爭對手。
但是這款編譯器魔改了SUN制定的JVM規範,引入了很多自有創新,比如:
(1)對象模型創新:Sun的JVM的對象模型將“對象頭”與對象的實例數據分開存放,而Microsoft Visual J++把兩者放在了一起。
(2)使用指針而不是基於句柄的引用:因為Microsoft Visual J++基本上是用C/C++加上彙編寫的,可以直接方便地使用指針來高效訪問數據,而SUN是用Java來開發JVM的,只能使用句柄。
(3)垃圾收集機制創新:Microsoft Visual J++採用的分代的GC,大幅領先於當時的Sun JVM使用的不分代的GC。
(4)對象同步創新:SUM JVM使用的是哈希表來存放同步對象的映射,每次都需要先將句柄轉換成key去查表;而微軟採用的是它們在操作系統設計中常用的手法,直接在對象頭中放一個同步塊的指針,指針訪問一步到位。
(5)RNI:直接採用COM技術訪問本地接口,而不需要通過SUN定義的接口做二次轉換。
Microsoft Visual J++推出之後也很快受到了所有Java 開發工具以及支持Java平臺廠商的全面圍剿。他們害怕Microsoft對Java市場的入侵,會讓其他廠商再次無法生存。之後連SUN也開始領軍圍攻 Microsoft,因為SUN除了害怕Microsoft 會慢慢地主宰Java 平臺和標準之外, 還發現 Microsoft正在很有技巧地逐步破壞Java語言和標準,例如Microsoft Visual J++便提供了許多非標準的Java用法並且很明顯地把 Microsoft Visual J++綁死在Windows 平臺,破壞 Java 的"一次編寫、到處運行"的美夢。
通過上面兩個20多年前的經典案例,不難看出:幹掉JVM這件事,早有公司做過技術上的成功嘗試,但是最終都沒能在商業和市場上成功。這裡面最關鍵的阻力在於:動了Java的品牌擁有者(以前是SUN,現在是收購了SUN的Oracle)的蛋糕,而它是Java的親爹,掌握了“血統的純正權”和“生態主導權”。根據現有的遊戲規則,即便不是幹掉JVM,哪怕是提供一個獨立的JVM,也必須通過對應的TCK(Java兼容性測試)認證,才能被“合法化”。
2. 方舟編譯器的優勢是什麼?
這個其實在前文已經表達得比較清楚了:直接編譯出原生二進制,運行速度快。
但是帶來的風險在上一個章節也揭示得很清楚了,這是現在大部分人忽視的地方。
既然幹掉JVM的潛在風險不小,那麼為什麼仍然要力推方舟編譯器呢?筆者分析如下:(1)因為方舟編譯器本質上是一個通用的編譯器框架,該框架理論上可以支持所有的語言,而不僅僅是Java。極端情況下,遭遇類似Symantec或者Microsoft當年受到的打擊,也不是“滿盤皆輸”。
(2)方舟編譯器這個框架,從實現上仍然採用了中間代碼的技術,所以傳統生態中,專注開發第一個階段(代碼->中間代碼)編譯器的公司和專注開發第二個階段(中間代碼->二進制)解釋器的公司仍然可以在方舟生態中找到新的位置。關鍵在於配合怎樣的生態政策和投資政策來吸引它們轉型。
(3)基於方舟編譯器的開放框架和中間語言技術,可以創造新的編程語言,這樣也可以在極端情況下形成“編程語言的備胎”(這個有點杞人憂天了)。
(4)方舟配合鴻蒙等OS,撐大生態喇叭口,增加供應鏈上的自主控制點。
3. 方舟編譯器的使用對象是誰?
它的使用對象是App開發者或者App運營商(App應用商城)。當他們使用方舟編譯器將使用Java語言編寫的App編譯成目標手機硬件平臺的二進制之後,就上架到App應用商城,供手機消費者下載。
4. 手機如何被方舟編譯器加速?
不是手機被加速,而是App被加速。但這個加速是在上架App應用商城、被手機消費者下載之前就完成了。並沒有什麼額外“魔法”在消費者的手機上。
5. 方舟編譯器的更多細節
關於方舟編譯器的更多細節,可以關注筆者的頭條號以及頭條號付費專欄,裡面有全方位的技術乾貨解讀。
周林ZhouLin
首先方舟編譯器目前還只是存在於華為的系列手機之中,暫時沒有開源的一個需求,也就是說只有華為的部分旗艦手機才能夠享受到方舟編譯器的這個功能。
對於後續華為自己的操作系統出來之後普遍搭載方舟編譯器,而華為又能否將這個功能開源,還是個未知數,首先這作為華為主打差異化的一個核心功能,我個人是認為,在其為華為取得絕對的領先優勢之前,基本上是不會去開源的。
即便是對於華為手機來說,也不過是部分的旗艦手機能夠率先使用,後續的老款手機還要經過很長時間的等待,包括一系列的適配之後才能夠使用,目前能夠首批使用這款手機的也不過七八款包括mate20系列,p30系列以及榮耀magic系列和榮耀數字旗艦系列。
所以在華為可操作系統出來之前,其實這個還是目前華為手機主打差異化的一個最大亮點,因為方舟編譯器的效率實在是不錯,也就是說能夠有效的提高安卓在運行時候的速度,包括打開第三方應用的速度,這讓本來在流暢度上與IOS有差距的安卓,簡直就是插上了翅膀。
即便我們說按照華為的說法,這個方舟編譯器在效率上只能夠達到他們官方宣稱的60%左右,其實流暢度都已經提升了不少,我們知道目前由於渲染機制和安卓整個生態不規範的原因,本身上其實與蘋果手機存在著可能肉眼能察覺到的流暢體驗差距,那如果方舟編譯器能夠做到60%,其實就已經大幅度縮小了這個差距。
當然,假如華為的操作系統在問世之後需要大力的推廣,而去做開源的話,那麼其實大多數用戶也是有可能通過華為的開源操作系統而享受到方舟編譯器的效果,我個人覺得這個功能還是非常值得推薦的,當然我自己所使用的magic系列目前還沒有得到,大批量的推送還在內測之中。
互聯網的放大鏡
其實在頭條上已經出現過無數的類似的問題了,直到現在,仍有很大一部分人沒弄清方舟編譯器到底是個什麼東西,怎麼來使用,認為方舟編譯器是安裝在手機中的。
“某手機支持方舟編譯器” 這句話正確而完整的理解是 “某手機能夠運行方舟編譯器編譯的程序”。方舟編譯器是在開發環境部署的,是程序員哥哥用來把寫好的代碼編譯成手機上能運行的app的。
對於技術上的問題,容易讓非技術人員產生誤解,理解產生偏差。用通俗的話來描述就是,麵包師新買了一臺麵包機,這檯面包機能做出更好的麵包,而吃麵包的人是不必擁有這檯面包機的,他們只需要關心自己能不能吃下這檯面包機做的麵包,能不能被正常消化,能不能和身體兼容。
負1樓
很多人對方舟編譯器有一個誤解,認為方舟編譯器是安裝在手機端的,其實不然,方舟編譯器是在電腦端的,是給軟件開發程序員開發程序的。軟件開發到運行的大概過程:首先軟件開發程序員利用方舟編譯器編譯程序,然後打包成程序軟件包,接著把程序軟件包上傳到服務器上。用戶再從服務器上下載和安裝程序軟件包,之後運行程序。方舟編譯器的本質就是把其他語言編譯成二進制語言,二進制語言是可以直接運行在CPU上的。
NMLINUX
所謂編譯器,是將應用程序從源程序翻譯成機器碼,然後在機器上直接運行。通常的基於JAVA的安卓應用需要手機上逐條解釋執行。
由此可以看出,編譯器並不需要放在手機,而是在應用上線前就已經完成了使命。
當然,也有一種情況,可以把編譯器安裝到手機上,然後在手機上直接下載源碼,再用編譯器由用戶自己編譯後安裝。這種情況要求用戶具備一定的編程水平,比較少。
數碼同行匯
你好,題主,對於這個問題,我覺得首先要知道什麼是方舟編譯器。
方舟編譯器是華為公司為了提升Android系統的編譯效率推出的一項系統及應用的編譯和運行機制。華為的方舟編譯器,就是將安卓應用開發者們所使用的JAVA、C/C++們轉換成機器代碼。
華為從EMUI9.1系統開始就新增很多支持方舟編譯器的主流應用,現在大部分主流應用都支持,打開軟件響應速度非常快,下載軟件的時候儘可能在華為應用市場下載。同時,你在更新系統也可以在更新詳情那裡看到是否有新增支持方舟編譯器的應用(見下圖)。
深圳追夢哥
這個與手機關係不大,是程序員考慮的問題。比如安卓手機操作系統弄好,用方舟編譯器編譯後裝到手機裡面!手機本身不需要安裝編譯器!
幸運連連心想事成
如果你買的是榮耀最新的旗艦手機榮耀20系列的話,是不需要手動更新的,榮耀20系列應該是出廠自帶方舟編譯器,在之前,EMUI9.1已經對系統組件System Server使用方舟編譯器進行優化,也就是說只要你的手機系統升級到EMUI9.1,就已經用上了方舟編譯器。
很多人對方舟編譯器表示好奇,不明白它到底有怎樣的體驗,其實,提升系統流暢度、提升第三方應用打開速度。
1、提升系統流暢度。目前EMUI 9.1中已經對系統組件System Server使用方舟編譯器進行優化,帶來了24%的系統流暢度提升,系統響應性能提高44%。這點本人深有體會,我的榮耀V20更新EMUI 9.1之後,系統反應速度明顯比之前明顯流暢了很多。
2、提升第三方應用打開速度。除了系統本身之外,使用了方舟編譯器的第三方應用,其流暢度也會有大幅提升,基本能做到秒開,對你沒看錯就是秒開,目前第三方有微博極速版進行了適配,根據華為給出的統計數據,操作流暢度可以提升60% 。並不是所有 app 都支持方舟編譯器,需要開發者主動採用方舟編譯器去開發應用才行,估計要等到今年下半年才有希望開始普及。
所以榮耀20在有了方舟編譯器的情況下,可以說是能體驗到目前為止最為流暢的安卓系統,那些說安卓卡的用戶,可以嘗試更新一下EMUI 9.1了。