ClassLoader 類加載和雙親委托機制

了解Dalvik和ART

  • 什么是Dalvik:Dalvik是Google公司自己設(shè)計用于Android平臺的Java虛擬機攀唯。支持已轉(zhuǎn)換為.dex(Dalvik Executable)格式的Java應(yīng)用程序的運行,.dex格式是專為Dalvik應(yīng)用設(shè)計的一種壓縮格式娄昆,適合內(nèi)存和處理器速度有限的系統(tǒng)(移動平臺)浸船。DVM的指令集是基于寄存器的章贞,執(zhí)行效率高(JVM的指令集是基于棧的 更通用备埃,跨平臺性好)
  • 什么是ART:Android Runtime尼桶, Android 4.4 中引入的一個開發(fā)者選項,也是 Android 5.0 及更高版本的默認模式搀庶。在應(yīng)用安裝的時候Ahead-Of-Time(AOT)預(yù)編譯字節(jié)碼到機器語言拐纱,這一機制叫Ahead-Of-Time(AOT)預(yù)編譯。應(yīng)用程序安裝會變慢地来,但是執(zhí)行將更有效率戳玫,啟動更快。(為什么不打包apk的時候生成機器語言的包:因為手機的平臺不同 arm 和 X86 對應(yīng)的機器碼不一樣未斑,需要在對應(yīng)平臺生成相應(yīng)的機器語言才能執(zhí)行,同時打包apk(dex文件)也是為了跨平臺)
  • Dalvik 和 ART的區(qū)別:
    1)在Dalvik下币绩,應(yīng)用運行需要解釋執(zhí)行蜡秽,把需要頻繁執(zhí)行的代碼(熱點代碼)通過即時編譯器(JIT)將字節(jié)碼轉(zhuǎn)換為機器碼保存在緩存中以提高代碼執(zhí)行效率,但是總的來說Dalvik運行效率低缆镣。而在ART 環(huán)境中芽突,應(yīng)用在安裝時,字節(jié)碼預(yù)編譯(AOT)成機器碼董瞻,安裝慢了寞蚌,但運行效率會提高田巴。
    2)ART占用空間比Dalvik大(字節(jié)碼變?yōu)闄C器碼), “空間換時間"挟秤。
    3)預(yù)編譯也可以明顯改善電池續(xù)航壹哺,因為應(yīng)用程序每次運行時不用重復(fù)編譯了,從而減少了 CPU 的使用頻率艘刚,降低了能耗管宵。
  • ART是兼容Dalvik的:ART會執(zhí)行AOT,但針對 Dalvik 開發(fā)的應(yīng)用也能在 ART 環(huán)境中運作攀甚。
    ART和Dalvik下APP的啟動

DexOpt與DexAot

  • DexOpt:對 dex 文件 進行 驗證 和 優(yōu)化 為odex(Optimized dex) 文件
  • DexAot:在安裝時對 dex 文件執(zhí)行dexopt優(yōu)化之后再將odex進行 AOT 提前編譯操作箩朴,編譯為OAT可執(zhí)行文件(機器碼)。
    apk在Dalvik和ART下的運行流程

ClassLoader :Java 類加載器

  • BootClassLoader:用于加載Android Framework層class文件秋度。
  • PathClassLoader: 用于Android應(yīng)用程序類加載器炸庞。可以加載指定的dex荚斯,以及jar燕雁、zip、apk中的classes.dex
  • DexClassLoader: 加載指定的dex鲸拥,以及jar拐格、zip、apk中的classes.dex
  • InMemoryDexClassLoader: android 8.0 以后推出的 可以加載內(nèi)存中的一個dex文件刑赶。
  • DexClassLoader和PathClassLoader的區(qū)別: DexClassLoader 需要指定一個dex文件優(yōu)化成odex后存儲odex的目錄(必須是APP的私有目錄(context.getCodeCacheDir())捏浊,不能是sd卡的目錄),PathClassLoader有默認的odex的存儲目錄(data/dalvik-cache)撞叨。

雙親委托機制

某個類加載器在加載類時金踪,首先將加載任務(wù)委托給父類加載器,依次遞歸牵敷,如果父類加載器可以完成類加載任務(wù)胡岔,就成功返回;只有父類加載器無法完成此加載任務(wù)或者沒有父類加載器時枷餐,才自己去加載靶瘸。


loadClass 解析
  • 雙親委托機制的作用:
    1、防止重復(fù)加載同一個.class毛肋。通過委托去向上面問一問怨咪,加載過了,就不用再加載一遍润匙。保證數(shù)據(jù)安全诗眨。
    2、保證核心.class不能被篡改孕讳。通過委托方式匠楚,不會去篡改核心.class巍膘,即使篡改也不會去加載,即使加載也不會是同一個.class對象了芋簿。不同的加載器加載同一個.class也不是同一個Class對象峡懈。這樣保證了Class執(zhí)行安全。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末益咬,一起剝皮案震驚了整個濱河市逮诲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌幽告,老刑警劉巖梅鹦,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異冗锁,居然都是意外死亡齐唆,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門冻河,熙熙樓的掌柜王于貴愁眉苦臉地迎上來箍邮,“玉大人,你說我怎么就攤上這事叨叙《П祝” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵擂错,是天一觀的道長味滞。 經(jīng)常有香客問我,道長钮呀,這世上最難降的妖魔是什么剑鞍? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮爽醋,結(jié)果婚禮上蚁署,老公的妹妹穿的比我還像新娘。我一直安慰自己蚂四,他們只是感情好光戈,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著证杭,像睡著了一般田度。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上解愤,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天,我揣著相機與錄音乎莉,去河邊找鬼送讲。 笑死奸笤,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的哼鬓。 我是一名探鬼主播监右,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼异希!你這毒婦竟也來了健盒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤称簿,失蹤者是張志新(化名)和其女友劉穎扣癣,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體憨降,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡父虑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了授药。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片士嚎。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖悔叽,靈堂內(nèi)的尸體忽然破棺而出莱衩,到底是詐尸還是另有隱情,我是刑警寧澤娇澎,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布笨蚁,位于F島的核電站,受9級特大地震影響九火,放射性物質(zhì)發(fā)生泄漏赚窃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一岔激、第九天 我趴在偏房一處隱蔽的房頂上張望勒极。 院中可真熱鬧,春花似錦虑鼎、人聲如沸辱匿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽匾七。三九已至,卻和暖如春江兢,著一層夾襖步出監(jiān)牢的瞬間昨忆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工杉允, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留邑贴,地道東北人席里。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像拢驾,于是被迫代替她去往敵國和親奖磁。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354