Java類加載器 java面試那些jvm的鬼

Java類加載器

類加載器(class loader)

用來加載 Java 類到 Java 虛擬機(jī)中施籍。Java 源程序(.java 文件) 編譯器編譯后就被轉(zhuǎn)換成 Java 字節(jié)代碼(.class 文件)。類加載器負(fù)責(zé)讀取 Java 字節(jié)代碼歧蕉,并轉(zhuǎn)換成 java.lang.Class類的一個(gè)實(shí)例委煤。每個(gè)這樣的實(shí)例用來表示一個(gè) Java 類。通過此實(shí)例的 newInstance()方法就可以創(chuàng)建出該類的一個(gè)對(duì)象棒卷。 Java 字節(jié)代碼可能是通過工具動(dòng)態(tài)生成的顾孽,也可能是通過網(wǎng)絡(luò)下載的。 基本上所有的類加載器都是 java.lang.ClassLoader類的一個(gè)實(shí)例

類加載器分類

系統(tǒng)提供的

  • 引導(dǎo)類加載器(bootstrap class loader):加載 Java 的核心庫(kù)娇跟,是用原生代碼來實(shí)現(xiàn)的岩齿,并不繼承自 java.lang.ClassLoader。(C++實(shí)現(xiàn),屬虛擬機(jī))lib/rt.jar
  • 擴(kuò)展類加載器(extensions class loader):它用來加載 Java 的擴(kuò)展庫(kù)苞俘。DIR:$JAVA_HOME/lib/ext
  • 系統(tǒng)類加載器(system class loader):它根據(jù)(CLASSPATH)來加載 Java 類。一般來說龄章,Java 應(yīng)用的類都是由它來完成加載的吃谣∑蚍猓可以通過 ClassLoader.getSystemClassLoader()來獲取它。

自定義

  • 應(yīng)用開發(fā)者自定義類加載器(Tomcat Web 容器)

Java雙親委派

當(dāng)類加載器收到類加載任務(wù)岗憋,會(huì)先交給其父類加載器去完成加載肃晚,因此最終加載任務(wù)都會(huì)傳遞到頂層的啟動(dòng)類加載器,只有當(dāng)父類加載器無法完成加載任務(wù)時(shí)仔戈,才會(huì)嘗試執(zhí)行加載任務(wù)关串。

采用雙親委派的一個(gè)好處是比如加載位于rt.jar包中的類java.lang.Object,不管是哪個(gè)加載器加載這個(gè)類监徘,最終都是委托給頂層的啟動(dòng)類加載器進(jìn)行加載晋修,這樣就保證了使用不同的類加載器最終得到的都是同樣一個(gè)Object對(duì)象。

? 雙親委派優(yōu)先父加載器加載, 但Java Servlet規(guī)范采用優(yōu)先當(dāng)前類加載器加載,加載失敗再委托父代理加載

類加載器與 OSGi

OSGi?是 Java 上的動(dòng)態(tài)模塊系統(tǒng)凰盔。它為開發(fā)人員提供了面向服務(wù)和基于組件的運(yùn)行環(huán)境墓卦,并提供標(biāo)準(zhǔn)的方式用來管理軟件的生命周期。

OSGi 中的每個(gè)模塊(bundle)都包含 Java 包和類户敬。模塊可以聲明它所依賴的需要導(dǎo)入(import)的其它模塊的 Java 包和類(通過 Import-Package)落剪,也可以聲明導(dǎo)出(export)自己的包和類,供其它模塊使用(通過 Export-Package)尿庐。也就是說需要能夠隱藏和共享一個(gè)模塊中的某些 Java 包和類忠怖。這是通過 OSGi 特有的類加載器機(jī)制來實(shí)現(xiàn)的。OSGi 中的每個(gè)模塊都有對(duì)應(yīng)的一個(gè)類加載器抄瑟。它負(fù)責(zé)加載模塊自己包含的 Java 包和類凡泣。當(dāng)它需要加載 Java 核心庫(kù)的類時(shí)(以 java開頭的包和類),它會(huì)代理給父類加載器(通常是啟動(dòng)類加載器)來完成锐借。當(dāng)它需要加載所導(dǎo)入的 Java 類時(shí)问麸,它會(huì)代理給導(dǎo)出此 Java 類的模塊來完成加載。模塊也可以顯式的聲明某些 Java 包和類钞翔,必須由父類加載器來加載严卖。只需要設(shè)置系統(tǒng)屬性 org.osgi.framework.bootdelegation的值即可。

解決依賴沖突的主要技術(shù),同時(shí)日常使用的熱部署,熱重載都是該類技術(shù)得以實(shí)現(xiàn).項(xiàng)目模塊化皆因此開始

參考資料

(IBM): https://www.ibm.com/developerworks/cn/java/j-lo-classloader/index.html "深入探討 Java 類加載器"
[掘金]: https://juejin.im/post/5b001f44518825428b390eee "JVM 面試知識(shí)整理"

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末布轿,一起剝皮案震驚了整個(gè)濱河市哮笆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌汰扭,老刑警劉巖稠肘,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異萝毛,居然都是意外死亡项阴,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門笆包,熙熙樓的掌柜王于貴愁眉苦臉地迎上來环揽,“玉大人略荡,你說我怎么就攤上這事∏附海” “怎么了汛兜?”我有些...
    開封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)通今。 經(jīng)常有香客問我粥谬,道長(zhǎng),這世上最難降的妖魔是什么辫塌? 我笑而不...
    開封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任漏策,我火速辦了婚禮,結(jié)果婚禮上璃氢,老公的妹妹穿的比我還像新娘哟玷。我一直安慰自己,他們只是感情好一也,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開白布巢寡。 她就那樣靜靜地躺著,像睡著了一般椰苟。 火紅的嫁衣襯著肌膚如雪抑月。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天舆蝴,我揣著相機(jī)與錄音谦絮,去河邊找鬼。 笑死洁仗,一個(gè)胖子當(dāng)著我的面吹牛层皱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赠潦,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼叫胖,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了她奥?” 一聲冷哼從身側(cè)響起瓮增,我...
    開封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎哩俭,沒想到半個(gè)月后绷跑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凡资,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年砸捏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡带膜,死狀恐怖吩谦,靈堂內(nèi)的尸體忽然破棺而出鸳谜,到底是詐尸還是另有隱情膝藕,我是刑警寧澤,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布咐扭,位于F島的核電站芭挽,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蝗肪。R本人自食惡果不足惜袜爪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望薛闪。 院中可真熱鬧辛馆,春花似錦、人聲如沸豁延。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)诱咏。三九已至苔可,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間袋狞,已是汗流浹背焚辅。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留苟鸯,地道東北人同蜻。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像早处,于是被迫代替她去往敵國(guó)和親湾蔓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355