Android 9.0 ART編譯分析(一)-編譯通路梳理

原創(chuàng)內(nèi)容彤委,轉(zhuǎn)載請注明出處驹暑,多謝配合。

最近做了dex2oat相關(guān)優(yōu)化矛市,那么簡單總結(jié)下一些相關(guān)流程與知識點芙沥。

這里虛擬機相關(guān)基礎(chǔ)知識這里不贅述了,不清楚的可以移步之前的文章:
熱修復(fù)&插件化(二)-虛擬機
啟動耗時分析(三)-ART編譯分析

我們都知道浊吏,ART虛擬機引入了AOT預(yù)編譯而昨,最終編譯任務(wù)是交由dex2oat來處理的。dex2oat是一個Android系統(tǒng)的二進制可執(zhí)行文件找田,保存在system/bin目錄下歌憨。

相比傳統(tǒng)的JIT編譯來說克胳,dex2oat編譯的二進制文件是持久化的案铺,當前編譯耗費時間更長、存儲空間占用也更大钥星,但是換來的是下次直接執(zhí)行持久化的機器碼漆改,大幅度提升運行效率心铃。

另外,需要注意的是:dex2oat執(zhí)行編譯操作的時候挫剑,會起j參數(shù)后面跟的線程數(shù)去執(zhí)行(常見的-j6)去扣,在大量執(zhí)行dex2oat操作的場景下,CPU占用率會非常高樊破,很大概率會占用大核和超大核影響到用戶前臺操作愉棱,甚至出現(xiàn)卡頓和黑屏。這里優(yōu)化策略我肯定不會寫出來的哲戚,哈哈羽氮,但是呢可以把一些相關(guān)的流程與知識點總結(jié)下。

top -t -m 10

PID TID PR CPU% S VSS RSS PCY UID Thread Proc
23836 23840 4 11% R 1297936K 59156K bg u0_a14 Compiler driver /system/bin/dex2oat
23836 23841 7 11% R 1297936K 59156K bg u0_a14 Compiler driver /system/bin/dex2oat
23836 23843 5 11% R 1297936K 59156K bg u0_a14 Compiler driver /system/bin/dex2oat
23836 23844 6 11% R 1297936K 59156K bg u0_a14 Compiler driver /system/bin/dex2oat
23836 23836 3 11% R 1297936K 59156K bg u0_a14 main /system/bin/dex2oat
23836 23845 7 11% R 1297940K 59156K bg u0_a14 Compiler driver /system/bin/dex2oat
23836 23842 3 11% R 1297936K 59156K bg u0_a14 Compiler driver /system/bin/dex2oat
23836 23839 7 11% R 1297936K 59156K bg u0_a14 Compiler driver /system/bin/dex2oat

本篇文章先對目前觸發(fā)dex2oat操作的通路進行簡單梳理:

一惫恼、觸發(fā)路徑

這里是原生的方式:

路徑 描述 編譯方式 編譯內(nèi)容
Install 應(yīng)用安裝通過installd觸發(fā)的編譯 speed-profile 主apk
OTA升級 系統(tǒng)升級通過installd觸發(fā)的編譯 verify 主apk
load dexFile 動態(tài)加載插件直接通過虛擬機觸發(fā)的編譯 quicken 插件
postboot 開機1分鐘后,針對全部安裝的7天內(nèi)未使用且過期的應(yīng)用通過installd觸發(fā)的編譯 verify 主apk
idle 同時滿足充電澳盐、idle狀態(tài)且24小時內(nèi)只觸發(fā)一次祈纯,主apk通過installd觸發(fā)編譯,插件通過虛擬機觸發(fā)編譯 speed-profile 主apk 和 插件
二令宿、觸發(fā)條件

dex2oat觸發(fā)之前會先做條件判斷,來決定是否需要做:

  • dex文件完全沒有編譯過腕窥。
  • 已經(jīng)生成了odex粒没,但是后續(xù)執(zhí)行了更高優(yōu)先級的compile filter,因此需要重新編譯覆蓋簇爆。
  • OTA系統(tǒng)升級癞松,boot image發(fā)生了變化。

所謂的過期就是針對后兩點而言的入蛆。

從編譯通路我們可以看到响蓉,觸發(fā)dex2oat編譯的方式主要有兩類:

  • 經(jīng)過PMS由installd觸發(fā)。
  • 動態(tài)加載插件是直接由虛擬機觸發(fā)哨毁。

這兩類路徑分別由后面篇文章來分析:
Android 9.0 ART編譯分析(二)-Installd觸發(fā)dex2oat編譯流程
Android 9.0 ART編譯分析(三)-虛擬機觸發(fā)dex2oat編譯流程

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載枫甲,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。
  • 序言:七十年代末扼褪,一起剝皮案震驚了整個濱河市想幻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌话浇,老刑警劉巖脏毯,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異幔崖,居然都是意外死亡食店,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門岖瑰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來叛买,“玉大人,你說我怎么就攤上這事蹋订÷收酰” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵露戒,是天一觀的道長椒功。 經(jīng)常有香客問我,道長智什,這世上最難降的妖魔是什么动漾? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮荠锭,結(jié)果婚禮上旱眯,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好删豺,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布共虑。 她就那樣靜靜地躺著,像睡著了一般呀页。 火紅的嫁衣襯著肌膚如雪妈拌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天蓬蝶,我揣著相機與錄音尘分,去河邊找鬼。 笑死丸氛,一個胖子當著我的面吹牛培愁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播雪位,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼竭钝,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了雹洗?” 一聲冷哼從身側(cè)響起香罐,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎时肿,沒想到半個月后庇茫,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡螃成,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年旦签,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寸宏。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡宁炫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出氮凝,到底是詐尸還是另有隱情羔巢,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布罩阵,位于F島的核電站竿秆,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏稿壁。R本人自食惡果不足惜幽钢,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望傅是。 院中可真熱鬧匪燕,春花似錦蕾羊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至界拦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間梗劫,已是汗流浹背享甸。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留梳侨,地道東北人蛉威。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像走哺,于是被迫代替她去往敵國和親蚯嫌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

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

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,111評論 1 32
  • 原創(chuàng)文章丙躏,轉(zhuǎn)載請注明出處择示,多謝! 一晒旅、ART簡介 編譯方式:具有JIT(Just-In-Time)和AOT(Ahe...
    Stan_Z閱讀 18,809評論 0 26
  • 摘自:http://www.2cto.com/kf/201401/270288.html一栅盲、Android系統(tǒng)性能...
    GB_speak閱讀 3,855評論 1 3
  • 我懷疑一點:老大,你是不是一點都不愛我废恋,還覺得我總不跟你離婚谈秫,總喊你回家 是累贅!是你見好煩的事S愎摹拟烫! 主要是煩...
    童基宸辰哈閱讀 168評論 0 0
  • 閱讀1小時,總計845小時迄本,第807日 閱讀《印度哲學》至第五硕淑、六章 屬性的重要性在于,它們使我們將此物與彼物區(qū)分...
    龍?zhí)赘缢_克海龍閱讀 50評論 0 0