Java-面試--請介紹類加載過程斧蜕,什么是雙親委派模型双霍?

一定要記清楚啊批销,這么基礎(chǔ)性的問題,不會的話多尷尬

  • 一般來說顷蟀,我們把Java的類加載過程分為三個主要步驟:加載、鏈接鸣个、初始化,具體行為在Java虛擬機(jī)規(guī)范里有非常詳細(xì)的定義囤萤。
  • 首先是加載階段(Loading),它是Java將字節(jié)碼數(shù)據(jù)從不同的數(shù)據(jù)源讀取到JVM中澄惊,并映射為JVM認(rèn)可的數(shù)據(jù)結(jié)構(gòu)(Class對象)富雅,這里的數(shù)據(jù)源可能是各種各樣的形態(tài),如jar文件没佑、class文件,甚至是網(wǎng)絡(luò)數(shù)據(jù)源等蛤奢;如果輸入數(shù)據(jù)不是ClassFile的結(jié)構(gòu),則會拋出ClassFormatError待秃。
  • 加載階段是用戶參與的階段,我們可以自定義類加載器章郁,去實(shí)現(xiàn)自己的類加載過程志衍。
  • 第二階段是鏈接(Linking),這是核心的步驟足画,簡單說是把原始的類定義信息平滑地轉(zhuǎn)化入JVM運(yùn)行的過程中佃牛。這里可進(jìn)一步細(xì)分為三個步驟:
    • 驗(yàn)證(Verification),這是虛擬機(jī)安全的重要保障象缀,JVM需要核驗(yàn)字節(jié)信息是符合Java虛擬機(jī)規(guī)范的,否則就被認(rèn)為是VerifyError央星,這樣就防止了惡意信息或者不合規(guī)的信息危害JVM的運(yùn)行惫东,驗(yàn)證階段有可能觸發(fā)更多class的加載毙石。
    • 準(zhǔn)備(Preparation)颓遏,創(chuàng)建類或接口中的靜態(tài)變量,并初始化靜態(tài)變量的初始值叁幢。但這里的“初始化”和下面的顯式初始化階段是有區(qū)別的曼玩,側(cè)重點(diǎn)在于分配所需要的內(nèi)存空間,不會去執(zhí)行更進(jìn)一步的JVM指令黍判。
    • 解析(Resolution),在這一步會將常量池中的符號引用(symbolic reference)替換為直接引用样悟。在Java虛擬機(jī)規(guī)范中,詳細(xì)介紹了類陈症、接口震糖、方法和字段等各個方面的解析。
  • 最后是初始化階段(initialization)吊说,這一步真正去執(zhí)行類初始化的代碼邏輯,包括靜態(tài)字段賦值的動作颁井,以及執(zhí)行類定義中的靜態(tài)初始化塊內(nèi)的邏輯,編譯器在編譯階段就會把這部分邏輯整理好养涮,父類型的初始化邏輯優(yōu)先于當(dāng)前類型的邏輯眉抬。
  • 再來談?wù)勲p親委派模型,簡單說就是當(dāng)類加載器(Class-Loader)試圖加載某個類型的時候蜀变,除非父加載器找不到相應(yīng)類型,否則盡量將這個任務(wù)代理給當(dāng)前加載器的父加載器去做爬舰。使用委派模型的目的是避免重復(fù)加載Java類型们陆。


    類的加載機(jī)制
  • 通常類加載機(jī)制有三個基本特征:
    • 雙親委派模型棒掠。但不是所有類加載都遵守這個模型屁商,有的時候烟很,啟動類加載器所加載的類型雾袱,是可能要加載用戶代碼的官还,比如JDK內(nèi)部的ServiceProvider/ServiceLoader機(jī)制,用戶可以在標(biāo)準(zhǔn)API框架上望伦,提供自己的實(shí)現(xiàn),JDK也需要提供些默認(rèn)的參考實(shí)現(xiàn)腿箩。 例如,Java 中JNDI珠移、JDBC末融、文件系統(tǒng)、Cipher等很多方面勾习,都是利用的這種機(jī)制,這種情況就不會用雙親委派模型去加載巧婶,而是利用所謂的上下文加載器。
    • 可見性,子類加載器可以訪問父加載器加載的類型骂倘,但是反過來是不允許的,不然诅需,因?yàn)槿鄙俦匾母綦x,我們就沒有辦法利用類加載器去實(shí)現(xiàn)容器的邏輯堰塌。
    • 單一性,由于父加載器的類型對于子加載器是可見的场刑,所以父加載器中加載過的類型,就不會在子加載器中重復(fù)加載铐懊。但是注意瞎疼,類加載器“鄰居”間,同一類型仍然可以被加載多次贼急,因?yàn)榛ハ嗖⒉豢梢姟?/li>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末太抓,一起剝皮案震驚了整個濱河市腻异,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌影斑,老刑警劉巖机打,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異皆辽,居然都是意外死亡芥挣,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門空免,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人扼菠,你說我怎么就攤上這事⊙埽” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵映挂,是天一觀的道長。 經(jīng)常有香客問我袖肥,道長振劳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任寸癌,我火速辦了婚禮,結(jié)果婚禮上蒸苇,老公的妹妹穿的比我還像新娘吮旅。我一直安慰自己溪烤,他們只是感情好庇勃,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鸳兽,像睡著了一般罕拂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上爆班,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機(jī)與錄音戚嗅,去河邊找鬼。 笑死渡处,一個胖子當(dāng)著我的面吹牛祟辟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播旧困,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼僚纷!你這毒婦竟也來了拗盒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤痊臭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后广匙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體恼策,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年分唾,在試婚紗的時候發(fā)現(xiàn)自己被綠了总棵。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鳍寂。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡迄汛,死狀恐怖骤视,靈堂內(nèi)的尸體忽然破棺而出鞍爱,到底是詐尸還是另有隱情专酗,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布沉填,位于F島的核電站,受9級特大地震影響翼闹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜猎荠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望荒叶。 院中可真熱鬧输虱,春花似錦些楣、人聲如沸悼瓮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽命贴。三九已至,卻和暖如春胸蛛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背葬项。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留襟士,地道東北人。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓陋桂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蝶溶。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355

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