第一,,多語言聯(lián)合編譯和跨語言調(diào)用開銷是影響Android性能開銷的最核心原因之一,,目前Android應(yīng)用市場里面Top級(jí)別的APP 95%以上都是由多種開發(fā)語言來實(shí)現(xiàn)的。舉例說明,,這些APP的邏輯部分是Java代碼,但是為了增強(qiáng)app應(yīng)用的安全性,、可靠性,、兼容性,開發(fā)者會(huì)用效率更高的C語言寫庫,,供Java來調(diào)用,。直接導(dǎo)致的結(jié)果是應(yīng)用真正運(yùn)行起來的時(shí)候,一定會(huì)有Java和C語言之間調(diào)用問題,,就會(huì)形成額外的性能開銷,。而方舟編譯器在不同語言代碼的開發(fā)環(huán)境中,就編譯成一套可執(zhí)行文件,,在運(yùn)行環(huán)境中高效執(zhí)行,。
第二,Android從誕生那天起,,就選擇了Java這個(gè)成熟的語言,,Java語言有跨平臺(tái)、分布式,,安全性高等諸多優(yōu)勢,。但是隨之應(yīng)運(yùn)而生的還有Java語言開發(fā)包中的重要組成--虛擬機(jī),無論是什么樣的硬件,,Java語言都不需要管,,統(tǒng)統(tǒng)抽象成Java的運(yùn)行環(huán)境,因此可以跨平臺(tái)操作,。這個(gè)又帶來另外一個(gè)問題,,任何機(jī)器只要把應(yīng)用裝上就會(huì)分配好虛擬機(jī),占用額外的系統(tǒng)資源,。今天的Android應(yīng)用市場中的APP,,實(shí)際上都是DEX碼的文件,消費(fèi)者從應(yīng)用市場下載APP以后,,真正解釋成機(jī)器指令和執(zhí)行文件是在手機(jī)上的虛擬機(jī)里做的,,因此對(duì)系統(tǒng)資源要求高。安卓自身的編譯技術(shù)在不斷的發(fā)展,,但始終需要在運(yùn)行中依賴虛擬機(jī)來進(jìn)行動(dòng)態(tài)編譯和解釋執(zhí)行,,對(duì)系統(tǒng)資源消耗較大。
而方舟編譯器在開發(fā)環(huán)境中就可以完成全部代碼的編譯,,無論業(yè)務(wù)邏輯是Java寫的還是C語言寫的,,不需要再次編譯,手機(jī)安裝應(yīng)用程序后無需依賴虛擬機(jī)資源,,即可全速運(yùn)行程序,,帶來效率上的極大提升,,消除了影響性能的虛擬機(jī)機(jī)制。EMUI 9.1僅僅對(duì)系統(tǒng)組件System Server應(yīng)用了華為方舟編譯器后,,就帶來了系統(tǒng)操作流暢度提升24%,,系統(tǒng)響應(yīng)性能提升44%的收益。華為方舟編譯器提供了全新的系統(tǒng)及應(yīng)用的編譯和運(yùn)行機(jī)制,,從動(dòng)態(tài)編譯變?yōu)殪o態(tài)編譯,,就是直接將高級(jí)語言直接編譯成機(jī)器碼,消除了虛擬機(jī)動(dòng)態(tài)編譯的額外開銷,,實(shí)現(xiàn)了開發(fā)和運(yùn)行效率的兼容并舉,。
內(nèi)存回收機(jī)制是另一個(gè)方舟編譯器的重大技術(shù)突破。Android系統(tǒng)在全局回收內(nèi)存資源時(shí),,需要暫停應(yīng)用等待回收完成,,這是產(chǎn)生隨機(jī)卡頓的重要原因。而在方舟編譯器里,,在編譯時(shí)為程序配備了及時(shí)回收的內(nèi)存處理機(jī)制,,即在程序執(zhí)行過程當(dāng)中同步實(shí)時(shí)處理回收。所以方舟編譯器的垃圾回收及時(shí)又徹底,,并且不需要停止進(jìn)程,。
第三,編譯器和翻譯語言的原理是一樣的,,單獨(dú)直譯出詞句并不是難點(diǎn),,難得是要翻譯的又快又好。比如把英文“What happens in Vegas, stays in Vegas”翻譯成中文,,最簡單的直譯是“在拉斯維加斯發(fā)生的一切,,就留在拉斯維加斯”;好一些的譯文是“事情過去了就過去了,,追悔無益”,;而優(yōu)秀的譯文則是“勿念過往,活在當(dāng)下”,。方舟編譯器通過了大量的優(yōu)化和調(diào)整,,一方面對(duì)Java語言深入了解后再細(xì)致重建,另一方面對(duì)機(jī)器指令順序結(jié)構(gòu)理解要求非常清晰,,這兩方面的匹配度越高,,編譯器效率越高。一個(gè)好的編譯器,,開發(fā)者一行代碼都不需要修改,,性能能提升10%到20%。
方舟編譯器跟現(xiàn)有的Android非常不一樣,,能做到更加靈活更加深入的優(yōu)化,,給應(yīng)用開發(fā)者帶來了更大的優(yōu)化應(yīng)用的機(jī)會(huì)?,F(xiàn)有的Android編譯大部分代碼在虛擬機(jī)環(huán)境運(yùn)行,虛擬機(jī)的創(chuàng)建來自于同一套“模板”,,但不同應(yīng)用的優(yōu)化訴求不一樣,,因而難以作深度的優(yōu)化,方舟編譯器則是每個(gè)應(yīng)用編譯優(yōu)化方案自己來定,,分別形成不同應(yīng)用優(yōu)化后的機(jī)器碼,每一個(gè)應(yīng)用開發(fā)者都有了把自己的應(yīng)用做的更好的機(jī)會(huì),,不再受限于Android虛擬機(jī)的限制,。
第四,方舟編譯器從多年前決定做的那一刻起,,就立下了上層業(yè)務(wù)代碼不需要改動(dòng),,開發(fā)者只通過華為方舟編譯器做可以重新編譯的目標(biāo)。現(xiàn)在開發(fā)者不論用Java語言去開發(fā)新的APP,,還是自己寫的C語言庫,,這兩種方式都不需要變,從而大大降低了開發(fā)者學(xué)習(xí)和使用成本,。