安卓7.0為什么這么快?深入淺出解析秘密(讀書筆記)

2016年8月份,Andioid Nougat(Andiord版本為7.X,以下簡稱為Andioid N)第一個正式固件推送。作為一整個年度的大版本更新,Andioid N為我們帶來了近250項新特性。而其中最受消費者關注的,莫過于應用安裝速度的巨大提升,以及應用安裝后,更低的存儲空間占用。



在感受Android N所帶來飛快體驗的同時,你一定會有這樣的疑問:為什么應用的安裝速度提升如此地明顯。并且應用的空間占用還變小了?

在解答這個問題前,我們需要先來了解幾個基本概念,它們是Android N中,使得應用安裝速度變得如此之快的核心,分別是:JIT、ART和AOT。

JIT編譯器(Just in time )
JIT的全稱是Just in time compilation,中文稱之為即時編譯,指的是動態編譯的一種形式,用于提高程序的運行效率。值得注意的是,這里說的是廣義上的JIT,在Android中,人們通常把以JIT編譯形式工作的編譯器稱為JIT編譯器。這個時候,我們應當把JIT理解為Just In Time Compiler,也就是我們常說的即時編譯器。
現在,我們要來深入了解一下JIT編譯器。
談到JIT編譯器,我們就不得不提到,安卓最初的一些程序特性。在安卓誕生之初,其運行程序的核心組件依賴于一個叫做Dalvik的運行環境,又稱為Dalvik虛擬機,它的作用是用于運行.dex(Dalvik Executable)格式的程序,由名字可以看出來,.dex格式是專為Dlavik設計的一種壓縮格式,對于當時安卓設備有限的硬件機能來說非常合適。
那么Dalvik跟JIT編譯器有什么關系呢?我們上面也提到了,在硬件機能有限的當時,Dalvik確實算是一個合適的解決方案。但是,時代在發展,安卓硬件的發展速度大家也都有目共睹,很快一個單純的Dalvik虛擬機滿足不了日益發展的硬件了。
于是,谷歌在Android 2.2版本中提出了使用JIT提高安卓的運行速度的方案。此后,JIT編譯器便與Dalvik虛擬機如同共生關系般,一直為后續版本所支持。直至Android 4.4版本。因為在Android 4.4以后,Dalvik與JIT將結束它們的歷史使命,轉而由一個全新的后輩來接替它們,它就是-ART。

ART(Android Runtime)
ART是Android 4.4以后,用于取代老前輩Dalvik的全新運行環境,我們也可以把它稱之為ART虛擬機。那么新的ART帶來了什么呢?
首先回憶一下,為了提高Dalvik的運行效率,谷歌在Android 2.2后引入了JIT,而與之對應的,ART則帶來了全新的AOT技術。

AOT(Ahead-of-time)
AOT是谷歌在ART中引入的一種全新的編譯策略,又可以稱其為預編譯技術。它與JIT最核心的差異是:JIT是一種動態編譯技術,而AOT則屬于靜態編譯。它們運行方式的不同在于:JIT是運行時編譯,可以對執行次數頻繁的dex代碼進行編譯與優化。使得在Dalvik中運行應用的響應時間大大減小。
而AOT預編譯策略使得ART在應用第一次安裝時就完成了所有的編譯工作,使得應用程序接近原生應用,之后打開應用時,不再需要額外的翻譯工作,直接使用本地機器碼運行,因此運行速度大大提升。

Android N 與 Android M對比實測
以上的一些基本概念理解完畢,現在,為了理解Android N的“極速之謎”,我們選用了Android N與Android M(Android版本號為6.X)作對比,不選用其他版本的原因也很簡單,差距太大沒有可比性。并且Android N之所以安裝快的原因也可以從兩個大版本之間的一些改動中找出來。(原計劃有視頻,已pass)

經過實測,應用的安裝速度幾乎提升了一倍,同時在Android N中,應用的體積不增反減,這是如何做到的呢。
其實答案已經在上面所說的三個基礎概念之中了。在Android M中,ART的編譯策略是如上所說的AOT預編譯,因此使得應用的執行效率無限接近原生應用。但是隨之帶來的壞處便是在應用安裝時,ART需要花大量的時間將應用編譯成原生指令。
想必你已經知道了,Android N的“極速之謎”謎底便是剩下的這個——JIT。

Android N安裝應用為什么這么快
如大家所想,谷歌在Android N中,JIT即時編譯器再次回歸,使之成為了一種JIT/AOT混合編譯模式。在Android N中,應用在安裝時不再做編譯,而是解釋字節碼。省去了冗長的編譯時間,安裝速度自然大大提升。
這個時候你可能就有新的疑問了,在應用安裝時不做編譯,那應用執行起來不是會變得很慢么?然而事實上是,Android N中的應用執行速度相比Android M并沒有太大的差異,甚至使用一段時間后,Android N的應用執行速度比Android M還要快上不少。
這就要歸功于新加入的這個JIT/AOT混合編譯技術了。新增的JIT編譯器用于對ART進行代碼分析,使之可以在應用運行時,持續優化Android應用的性能。使得安裝時不做編譯,也能達到與安裝時完整編譯一樣的效果。這種編譯模式我們依舊同稱為AOT,只不過它的含義不再是預編譯,而是全時編譯技術(All Of the Time compilation)。
此外,JIT的分析結果會被保存起來。當Android設備空閑或充電時,ART就會根據JIT的分析結果,將代碼中的常用方法進行編譯,而不常用的方法則待到需要時再編譯,因而省下了部分存儲空間。直觀的體現就是我們安裝完應用后,存儲空間的占用變少了。

應用占用空間對比
根據實測,手機淘寶6.5.0安裝完后在Android M中占用空間為171MB,而Android N中占用空間為156MB。王者榮耀1.17.1.23安裝完后在Android M中占用空間為439MB,在Android N中占用空間為428MB。以下為個人推測,王者榮耀在兩個版本中的占用空間差沒有手機淘寶的大的原因,很可能是因為手游中多為常用的交互代碼,而手機淘寶中大多數交互都能在web中完成,因而不常用的代碼可能更多。造成了這個現象。

總結
最后總結一下。
Android N安裝應用快,是因其在安裝時只解釋字節碼,省去了編譯所用的時間。之所以能省去編譯環節,是因其加入了全新的AOT全時編譯技術,使得應用執行效率保持與Android M相同甚至更好。因而ART不再編譯所有代碼,所以省下了部分存儲空間。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,732評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,214評論 3 426
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,781評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,588評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,315評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,699評論 1 327
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,698評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,882評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,441評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,189評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,388評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,933評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,613評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,023評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,310評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,112評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,334評論 2 377

推薦閱讀更多精彩內容

  • 兩年前阿里開源了Dexposed 項目,它能夠在Dalvik上無侵入地實現運行時方法攔截,正如其介紹「enable...
    weishu閱讀 4,596評論 3 42
  • 我不曾存在過 將來那個人 也不是我 我愛護好這個身體 為的是交給將來的我 他是我永遠不會見面的朋友 我為他備忘 為...
    馬優MARS閱讀 255評論 0 0
  • 掌門_艾老師閱讀 227評論 0 1
  • 只有在家里,才能意識到濃濃的綠意,才知四季的分明,西墻外的綠茵,綠的著了重色,一入院一抬眼恍若一片森林,林中有鳥,...
    梧桐兮兮閱讀 282評論 0 0