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

2016年8月份,Andioid Nougat(Andiord版本為7.X汗销,以下簡稱為Andioid N)第一個正式固件推送犹褒。作為一整個年度的大版本更新骆膝,Andioid N為我們帶來了近250項(xiàng)新特性砰嘁。而其中最受消費(fèi)者關(guān)注的呕乎,莫過于應(yīng)用安裝速度的巨大提升蝙斜,以及應(yīng)用安裝后精算,更低的存儲空間占用鲤嫡。



在感受Android N所帶來飛快體驗(yàn)的同時(shí)钙畔,你一定會有這樣的疑問:為什么應(yīng)用的安裝速度提升如此地明顯蕴忆。并且應(yīng)用的空間占用還變小了茧跋?

在解答這個問題前朦拖,我們需要先來了解幾個基本概念,它們是Android N中厌衔,使得應(yīng)用安裝速度變得如此之快的核心璧帝,分別是:JIT、ART和AOT富寿。

JIT編譯器(Just in time )
JIT的全稱是Just in time compilation睬隶,中文稱之為即時(shí)編譯锣夹,指的是動態(tài)編譯的一種形式,用于提高程序的運(yùn)行效率苏潜。值得注意的是银萍,這里說的是廣義上的JIT,在Android中恤左,人們通常把以JIT編譯形式工作的編譯器稱為JIT編譯器贴唇。這個時(shí)候,我們應(yīng)當(dāng)把JIT理解為Just In Time Compiler飞袋,也就是我們常說的即時(shí)編譯器戳气。
現(xiàn)在,我們要來深入了解一下JIT編譯器巧鸭。
談到JIT編譯器瓶您,我們就不得不提到,安卓最初的一些程序特性纲仍。在安卓誕生之初呀袱,其運(yùn)行程序的核心組件依賴于一個叫做Dalvik的運(yùn)行環(huán)境,又稱為Dalvik虛擬機(jī)郑叠,它的作用是用于運(yùn)行.dex(Dalvik Executable)格式的程序夜赵,由名字可以看出來,.dex格式是專為Dlavik設(shè)計(jì)的一種壓縮格式乡革,對于當(dāng)時(shí)安卓設(shè)備有限的硬件機(jī)能來說非常合適寇僧。
那么Dalvik跟JIT編譯器有什么關(guān)系呢?我們上面也提到了署拟,在硬件機(jī)能有限的當(dāng)時(shí)婉宰,Dalvik確實(shí)算是一個合適的解決方案。但是推穷,時(shí)代在發(fā)展心包,安卓硬件的發(fā)展速度大家也都有目共睹,很快一個單純的Dalvik虛擬機(jī)滿足不了日益發(fā)展的硬件了馒铃。
于是蟹腾,谷歌在Android 2.2版本中提出了使用JIT提高安卓的運(yùn)行速度的方案。此后区宇,JIT編譯器便與Dalvik虛擬機(jī)如同共生關(guān)系般娃殖,一直為后續(xù)版本所支持。直至Android 4.4版本议谷。因?yàn)樵贏ndroid 4.4以后炉爆,Dalvik與JIT將結(jié)束它們的歷史使命,轉(zhuǎn)而由一個全新的后輩來接替它們,它就是-ART芬首。

ART(Android Runtime)
ART是Android 4.4以后赴捞,用于取代老前輩Dalvik的全新運(yùn)行環(huán)境,我們也可以把它稱之為ART虛擬機(jī)郁稍。那么新的ART帶來了什么呢赦政?
首先回憶一下,為了提高Dalvik的運(yùn)行效率耀怜,谷歌在Android 2.2后引入了JIT恢着,而與之對應(yīng)的,ART則帶來了全新的AOT技術(shù)财破。

AOT(Ahead-of-time)
AOT是谷歌在ART中引入的一種全新的編譯策略掰派,又可以稱其為預(yù)編譯技術(shù)。它與JIT最核心的差異是:JIT是一種動態(tài)編譯技術(shù)狈究,而AOT則屬于靜態(tài)編譯碗淌。它們運(yùn)行方式的不同在于:JIT是運(yùn)行時(shí)編譯盏求,可以對執(zhí)行次數(shù)頻繁的dex代碼進(jìn)行編譯與優(yōu)化抖锥。使得在Dalvik中運(yùn)行應(yīng)用的響應(yīng)時(shí)間大大減小。
而AOT預(yù)編譯策略使得ART在應(yīng)用第一次安裝時(shí)就完成了所有的編譯工作碎罚,使得應(yīng)用程序接近原生應(yīng)用磅废,之后打開應(yīng)用時(shí),不再需要額外的翻譯工作荆烈,直接使用本地機(jī)器碼運(yùn)行拯勉,因此運(yùn)行速度大大提升。

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

經(jīng)過實(shí)測,應(yīng)用的安裝速度幾乎提升了一倍钦购,同時(shí)在Android N中檐盟,應(yīng)用的體積不增反減,這是如何做到的呢押桃。
其實(shí)答案已經(jīng)在上面所說的三個基礎(chǔ)概念之中了葵萎。在Android M中,ART的編譯策略是如上所說的AOT預(yù)編譯,因此使得應(yīng)用的執(zhí)行效率無限接近原生應(yīng)用羡忘。但是隨之帶來的壞處便是在應(yīng)用安裝時(shí)锡足,ART需要花大量的時(shí)間將應(yīng)用編譯成原生指令。
想必你已經(jīng)知道了壳坪,Android N的“極速之謎”謎底便是剩下的這個——JIT舶得。

Android N安裝應(yīng)用為什么這么快
如大家所想,谷歌在Android N中爽蝴,JIT即時(shí)編譯器再次回歸沐批,使之成為了一種JIT/AOT混合編譯模式。在Android N中蝎亚,應(yīng)用在安裝時(shí)不再做編譯九孩,而是解釋字節(jié)碼。省去了冗長的編譯時(shí)間发框,安裝速度自然大大提升躺彬。
這個時(shí)候你可能就有新的疑問了,在應(yīng)用安裝時(shí)不做編譯梅惯,那應(yīng)用執(zhí)行起來不是會變得很慢么宪拥?然而事實(shí)上是,Android N中的應(yīng)用執(zhí)行速度相比Android M并沒有太大的差異铣减,甚至使用一段時(shí)間后她君,Android N的應(yīng)用執(zhí)行速度比Android M還要快上不少。
這就要?dú)w功于新加入的這個JIT/AOT混合編譯技術(shù)了葫哗。新增的JIT編譯器用于對ART進(jìn)行代碼分析缔刹,使之可以在應(yīng)用運(yùn)行時(shí),持續(xù)優(yōu)化Android應(yīng)用的性能劣针。使得安裝時(shí)不做編譯校镐,也能達(dá)到與安裝時(shí)完整編譯一樣的效果。這種編譯模式我們依舊同稱為AOT捺典,只不過它的含義不再是預(yù)編譯鸟廓,而是全時(shí)編譯技術(shù)(All Of the Time compilation)。
此外辣苏,JIT的分析結(jié)果會被保存起來肝箱。當(dāng)Android設(shè)備空閑或充電時(shí),ART就會根據(jù)JIT的分析結(jié)果稀蟋,將代碼中的常用方法進(jìn)行編譯煌张,而不常用的方法則待到需要時(shí)再編譯,因而省下了部分存儲空間退客。直觀的體現(xiàn)就是我們安裝完應(yīng)用后骏融,存儲空間的占用變少了链嘀。

應(yīng)用占用空間對比
根據(jù)實(shí)測,手機(jī)淘寶6.5.0安裝完后在Android M中占用空間為171MB档玻,而Android N中占用空間為156MB怀泊。王者榮耀1.17.1.23安裝完后在Android M中占用空間為439MB,在Android N中占用空間為428MB误趴。以下為個人推測霹琼,王者榮耀在兩個版本中的占用空間差沒有手機(jī)淘寶的大的原因,很可能是因?yàn)槭钟沃卸酁槌S玫慕换ゴa凉当,而手機(jī)淘寶中大多數(shù)交互都能在web中完成枣申,因而不常用的代碼可能更多。造成了這個現(xiàn)象看杭。

總結(jié)
最后總結(jié)一下忠藤。
Android N安裝應(yīng)用快,是因其在安裝時(shí)只解釋字節(jié)碼楼雹,省去了編譯所用的時(shí)間模孩。之所以能省去編譯環(huán)節(jié),是因其加入了全新的AOT全時(shí)編譯技術(shù)贮缅,使得應(yīng)用執(zhí)行效率保持與Android M相同甚至更好榨咐。因而ART不再編譯所有代碼,所以省下了部分存儲空間携悯。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末祭芦,一起剝皮案震驚了整個濱河市筷笨,隨后出現(xiàn)的幾起案子憔鬼,更是在濱河造成了極大的恐慌,老刑警劉巖胃夏,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件轴或,死亡現(xiàn)場離奇詭異,居然都是意外死亡仰禀,警方通過查閱死者的電腦和手機(jī)照雁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來答恶,“玉大人饺蚊,你說我怎么就攤上這事⌒ぃ” “怎么了污呼?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長包竹。 經(jīng)常有香客問我燕酷,道長籍凝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任苗缩,我火速辦了婚禮饵蒂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘酱讶。我一直安慰自己退盯,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布泻肯。 她就那樣靜靜地躺著得问,像睡著了一般。 火紅的嫁衣襯著肌膚如雪软免。 梳的紋絲不亂的頭發(fā)上宫纬,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天,我揣著相機(jī)與錄音膏萧,去河邊找鬼漓骚。 笑死,一個胖子當(dāng)著我的面吹牛榛泛,可吹牛的內(nèi)容都是我干的蝌蹂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼曹锨,長吁一口氣:“原來是場噩夢啊……” “哼孤个!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起沛简,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤齐鲤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后椒楣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體给郊,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年捧灰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了淆九。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡毛俏,死狀恐怖炭庙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情煌寇,我是刑警寧澤焕蹄,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站唧席,受9級特大地震影響擦盾,放射性物質(zhì)發(fā)生泄漏嘲驾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一迹卢、第九天 我趴在偏房一處隱蔽的房頂上張望辽故。 院中可真熱鬧,春花似錦腐碱、人聲如沸誊垢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽喂走。三九已至,卻和暖如春谋作,著一層夾襖步出監(jiān)牢的瞬間芋肠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工遵蚜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留帖池,地道東北人。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓吭净,卻偏偏與公主長得像睡汹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子寂殉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,277評論 25 707
  • 兩年前阿里開源了Dexposed 項(xiàng)目囚巴,它能夠在Dalvik上無侵入地實(shí)現(xiàn)運(yùn)行時(shí)方法攔截,正如其介紹「enable...
    weishu閱讀 4,586評論 3 42
  • 我不曾存在過 將來那個人 也不是我 我愛護(hù)好這個身體 為的是交給將來的我 他是我永遠(yuǎn)不會見面的朋友 我為他備忘 為...
    馬優(yōu)MARS閱讀 251評論 0 0
  • 掌門_艾老師閱讀 225評論 0 1
  • 只有在家里友扰,才能意識到濃濃的綠意彤叉,才知四季的分明,西墻外的綠茵焕檬,綠的著了重色姆坚,一入院一抬眼恍若一片森林,林中有鳥实愚,...
    梧桐兮兮閱讀 276評論 0 0