ART箱叁、AOT、JIT惕医、Dalvik之間的關(guān)系

JIT與Dalvik

JIT是"Just In Time Compiler"的縮寫耕漱,就是"即時(shí)編譯技術(shù)",與Dalvik虛擬機(jī)相關(guān)抬伺。

怎么理解這句話呢螟够?這要從Android的一些特性說(shuō)起。

JIT是在2.2版本提出的峡钓,目的是為了提高Android的運(yùn)行速度妓笙,一直存活到4.4版本,因?yàn)樵?.4之后的ROM中能岩,就不存在Dalvik虛擬機(jī)了寞宫。

我們使用Java開(kāi)發(fā)android,在編譯打包APK文件時(shí)捧灰,會(huì)經(jīng)過(guò)以下流程

Java編譯器將應(yīng)用中所有Java文件編譯為class文件
dx工具將應(yīng)用編譯輸出的類文件轉(zhuǎn)換為Dalvik字節(jié)碼淆九,即dex文件
之后經(jīng)過(guò)簽名统锤、對(duì)齊等操作變?yōu)锳PK文件毛俏。

Dalvik虛擬機(jī)可以看做是一個(gè)Java VM炭庙,他負(fù)責(zé)解釋dex文件為機(jī)器碼,如果我們不做處理的話煌寇,每次執(zhí)行代碼焕蹄,都需要Dalvik將dex代碼翻譯為微處理器指令,然后交給系統(tǒng)處理阀溶,這樣效率不高腻脏。

為了解決這個(gè)問(wèn)題,Google在2.2版本添加了JIT編譯器银锻,當(dāng)App運(yùn)行時(shí)永品,每當(dāng)遇到一個(gè)新類,JIT編譯器就會(huì)對(duì)這個(gè)類進(jìn)行編譯击纬,經(jīng)過(guò)編譯后的代碼鼎姐,會(huì)被優(yōu)化成相當(dāng)精簡(jiǎn)的原生型指令碼(即native code),這樣在下次執(zhí)行到相同邏輯的時(shí)候更振,速度就會(huì)更快炕桨。

當(dāng)然使用JIT也不一定加快執(zhí)行速度,如果大部分代碼的執(zhí)行次數(shù)很少肯腕,那么編譯花費(fèi)的時(shí)間不一定少于執(zhí)行dex的時(shí)間献宫。Google當(dāng)然也知道這一點(diǎn),所以JIT不對(duì)所有dex代碼進(jìn)行編譯实撒,而是只編譯執(zhí)行次數(shù)較多的dex為本地機(jī)器碼姊途。

有一點(diǎn)需要注意,那就是dex字節(jié)碼翻譯成本地機(jī)器碼是發(fā)生在應(yīng)用程序的運(yùn)行過(guò)程中的知态,并且應(yīng)用程序每一次重新運(yùn)行的時(shí)候捷兰,都要做重做這個(gè)翻譯工作,所以這個(gè)工作并不是一勞永逸肴甸,每次重新打開(kāi)App寂殉,都需要JIT編譯。

另外原在,Dalvik虛擬機(jī)從Android一出生一直活到4.4版本友扰,而JIT在Android剛發(fā)布的時(shí)候并不存在,在2.2之后才被添加到Dalvik中庶柿。

ART與AOT

AOT是"Ahead Of Time"的縮寫村怪,指的就是ART(Anroid RunTime)這種運(yùn)行方式。

前面介紹過(guò)浮庐,JIT是運(yùn)行時(shí)編譯甚负,這樣可以對(duì)執(zhí)行次數(shù)頻繁的dex代碼進(jìn)行編譯和優(yōu)化柬焕,減少以后使用時(shí)的翻譯時(shí)間,雖然可以加快Dalvik運(yùn)行速度梭域,但是還是有弊病斑举,那就是將dex翻譯為本地機(jī)器碼也要占用時(shí)間,所以Google在4.4之后推出了ART病涨,用來(lái)替換Dalvik富玷。

在4.4版本上,兩種運(yùn)行時(shí)環(huán)境共存既穆,可以相互切換赎懦,但是在5.0+,Dalvik虛擬機(jī)則被徹底的丟棄幻工,全部采用ART励两。

ART的策略與Dalvik不同,在ART 環(huán)境中囊颅,應(yīng)用在第一次安裝的時(shí)候当悔,字節(jié)碼就會(huì)預(yù)先編譯成機(jī)器碼,使其成為真正的本地應(yīng)用迁酸。之后打開(kāi)App的時(shí)候先鱼,不需要額外的翻譯工作,直接使用本地機(jī)器碼運(yùn)行奸鬓,因此運(yùn)行速度提高焙畔。

當(dāng)然ART與Dalvik相比,還是有缺點(diǎn)的串远。

ART需要應(yīng)用程序在安裝時(shí)宏多,就把程序代碼轉(zhuǎn)換成機(jī)器語(yǔ)言,所以這會(huì)消耗掉更多的存儲(chǔ)空間澡罚,但消耗掉空間的增幅通常不會(huì)超過(guò)應(yīng)用代碼包大小的20%
由于有了一個(gè)轉(zhuǎn)碼的過(guò)程伸但,所以應(yīng)用安裝時(shí)間難免會(huì)延長(zhǎng)
但是這些與更流暢的Android體驗(yàn)相比而言,不值一提留搔。

總結(jié)

通過(guò)前面背景知識(shí)的介紹更胖,我終于可以更簡(jiǎn)單的介紹這四個(gè)名詞之間的關(guān)系了:

JIT代表運(yùn)行時(shí)編譯策略,也可以理解成一種運(yùn)行時(shí)編譯器隔显,是為了加快Dalvik虛擬機(jī)解釋dex速度提出的一種技術(shù)方案却妨,來(lái)緩存頻繁使用的本地機(jī)器碼
ART和Dalvik都算是一種Android運(yùn)行時(shí)環(huán)境,或者叫做虛擬機(jī)括眠,用來(lái)解釋dex類型文件彪标。但是ART是安裝時(shí)解釋,Dalvik是運(yùn)行時(shí)解釋
AOT可以理解為一種編譯策略掷豺,即運(yùn)行前編譯捞烟,ART虛擬機(jī)的主要特征就是AOT

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末薄声,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子题画,更是在濱河造成了極大的恐慌默辨,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件婴程,死亡現(xiàn)場(chǎng)離奇詭異廓奕,居然都是意外死亡抱婉,警方通過(guò)查閱死者的電腦和手機(jī)档叔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蒸绩,“玉大人衙四,你說(shuō)我怎么就攤上這事』家冢” “怎么了传蹈?”我有些...
    開(kāi)封第一講書人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)步藕。 經(jīng)常有香客問(wèn)我惦界,道長(zhǎng),這世上最難降的妖魔是什么咙冗? 我笑而不...
    開(kāi)封第一講書人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮雾消,結(jié)果婚禮上灾搏,老公的妹妹穿的比我還像新娘。我一直安慰自己立润,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著昼捍,像睡著了一般妒茬。 火紅的嫁衣襯著肌膚如雪担锤。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,698評(píng)論 1 305
  • 那天乍钻,我揣著相機(jī)與錄音肛循,去河邊找鬼。 笑死银择,一個(gè)胖子當(dāng)著我的面吹牛多糠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播浩考,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼夹孔,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了怀挠?” 一聲冷哼從身側(cè)響起析蝴,我...
    開(kāi)封第一講書人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎绿淋,沒(méi)想到半個(gè)月后闷畸,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吞滞,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年佑菩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片裁赠。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡殿漠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出佩捞,到底是詐尸還是另有隱情绞幌,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布一忱,位于F島的核電站莲蜘,受9級(jí)特大地震影響谭确,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜票渠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一逐哈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧问顷,春花似錦昂秃、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至羞芍,卻和暖如春哗戈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背荷科。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留纱注,地道東北人畏浆。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像狞贱,于是被迫代替她去往敵國(guó)和親刻获。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

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