在工作中遇到了到底是使用Thread.currentThread().getContextClassLoader()還是 getClass().getClassLoader()來獲得當(dāng)前類的加載器的問題,在網(wǎng)上搜了很多資料,自己總結(jié)了一下:
1、這兩種方法中 使用Thread.currentThread().getContextClassLoader()來獲得當(dāng)前類加載器更為安全,而getClass().getClassLoader()的這種方法一般用在getResource,因?yàn)槟阆胍@取某個資源文件的時候,這個資源文件的位置是相對固定的。
2、JVM類加載有一種委托機(jī)制,即JVM中類加載器都有一個層次結(jié)構(gòu),即每一個類加載器都有一個父類加載器,當(dāng)被要求加載一個類時,首先會委托給其父類進(jìn)行加載,當(dāng)父類無法成功加載時則由自身加載。然而,這種委托機(jī)制也不是都能順利執(zhí)行:通常發(fā)生在有些JVM核心代碼必須動態(tài)加載由應(yīng)用程序開發(fā)人員提供的資源時。以JNDI舉例:它的核心內(nèi)容(從J2SE1.3開始)在rt.jar中的引導(dǎo)類中實(shí)現(xiàn)了,但是這些JNDI核心類可能加載由獨(dú)立廠商實(shí)現(xiàn)和部署在應(yīng)用程序的classpath中的JNDI提供者。這個場景要求一個父類加載器(這個例子中的原始類加載器,即加載rt.jar的加載器)去加載一個在它的子類加載器(系統(tǒng)類加載器)中可見的類。此時通常的J2SE委托機(jī)制不能工作,解決辦法是讓JNDI核心類使用線程上下文加載器,從而有效建立一條與類加載器層次結(jié)構(gòu)相反方向的“通道”達(dá)到正確的委托。
JVM中的類加載器
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 原文鏈接:http://iaspecwang.iteye.com/blog/1931043 一.概述 定義:虛擬機(jī)...
- 首先聲明,我是因?yàn)榭戳薎mportNew網(wǎng)站上的幾篇關(guān)于類加載器的文章之后,才萌生了寫這篇文章的想法。所以在寫這篇...
- ClassLoader翻譯過來就是類加載器,普通的java開發(fā)者其實(shí)用到的不多,但對于某些框架開發(fā)者來說卻非常常見...
- JVM類加載機(jī)制 概述 類加載過程 加載 通過類的全限定名獲取類的二進(jìn)制流 將靜態(tài)存儲結(jié)構(gòu)轉(zhuǎn)化為方法區(qū)的運(yùn)行時數(shù)據(jù)...