最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

jvm雙親委派 vs 破壞雙親委派理解加載器的權(quán)責(zé)分配

 更新時(shí)間:2023年10月12日 11:45:38   作者:jacheut  
這篇文章主要為大家介紹了jvm雙親委派 vs 破壞雙親委派對(duì)比來理解加載器的權(quán)責(zé)分配,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

雙親委派模型

對(duì)于任意一個(gè)類,都需要由加載它的類加載器和這個(gè)類本身來一同確立其在Java虛擬機(jī)中的唯一性。

為什么需要雙親委派

如果不是同一個(gè)類加載器加載,即使是相同的class文件,也會(huì)出現(xiàn)判斷不相同的情況,從而引發(fā)一些意想不到的情況,為了保證相同的class文件,在使用的時(shí)候,是相同的對(duì)象,jvm設(shè)計(jì)的時(shí)候,采用了雙親委派的方式來加載類。

雙親委派好處

  • 避免同一個(gè)類被多次加載;
  • 每個(gè)加載器只能加載自己范圍內(nèi)的類;

缺點(diǎn):

頂層的啟動(dòng)類加載器的代碼無法訪問到底層的類加載器。

每一個(gè)類都有一個(gè)對(duì)應(yīng)它的類加載器。系統(tǒng)中的 ClassLoder 在協(xié)同工作的時(shí)候會(huì)默認(rèn)使用雙親委派模型 。即在類加載的時(shí)候,系統(tǒng)會(huì)首先判斷當(dāng)前類是否被加載過。已經(jīng)被加載的類會(huì)直接返回,否則才會(huì)嘗試加載。類加載的時(shí)候,首先會(huì)把該請(qǐng)求委派該父類加載器的 loadClass() 處理,因此所有的請(qǐng)求最終都應(yīng)該傳送到頂層的啟動(dòng)類加載器 BootstrapClassLoader中。當(dāng)父類加載器無法處理時(shí),才由自己來處理。特別當(dāng)父類加載器為null時(shí),會(huì)使用啟動(dòng)類加載器 BootstrapClassLoader 作為父類加載器。

父類加載器有自己的加載范圍,范圍內(nèi)沒有找到,則不加載,并返回給子類。

jvm提供了三種系統(tǒng)加載器:

  • 啟動(dòng)類加載器(Bootstrap ClassLoader):C++實(shí)現(xiàn),在java里無法獲取,負(fù)責(zé)加載/lib下的類。
  • 擴(kuò)展類加載器(Extension ClassLoader): Java實(shí)現(xiàn),可以在java里獲取,負(fù)責(zé)加載/lib/ext下的類。
  • 系統(tǒng)類加載器/應(yīng)用程序類加載器(Application ClassLoader):是與我們接觸對(duì)多的類加載器,我們寫的代碼默認(rèn)就是由它來加載,ClassLoader.getSystemClassLoader返回的就是它。

破壞雙親委派

為什么需要破壞雙親委派?

因?yàn)樵谀承┣闆r下父類加載器需要委托子類加載器去加載class文件。受到加載范圍的限制,父類加載器無法加載到需要的文件,以Driver接口為例,由于Driver接口定義在jdk當(dāng)中的,而其實(shí)現(xiàn)由各個(gè)數(shù)據(jù)庫的服務(wù)商來提供,比如mysql的就寫了MySQL Connector,那么問題就來了,DriverManager(也由jdk提供)要加載各個(gè)實(shí)現(xiàn)了Driver接口的實(shí)現(xiàn)類,然后進(jìn)行管理,但是DriverManager由啟動(dòng)類加載器加載,只能記載JAVA_HOME的lib下文件,而其實(shí)現(xiàn)是由服務(wù)商提供的,由系統(tǒng)類加載器加載,這個(gè)時(shí)候就需要啟動(dòng)類加載器來委托子類來加載Driver實(shí)現(xiàn),從而破壞了雙親委派,這里僅僅是舉了破壞雙親委派的其中一個(gè)情況。

破壞雙親委派的實(shí)現(xiàn)

我們結(jié)合Driver來看一下在spi(Service Provider Inteface)中如何實(shí)現(xiàn)破壞雙親委派。
先從DriverManager開始看,平時(shí)我們通過DriverManager來獲取數(shù)據(jù)庫的Connection:
在調(diào)用DriverManager的時(shí)候,會(huì)先初始化類,調(diào)用其中的靜態(tài)塊:

可以看到,load方法調(diào)用獲取了當(dāng)前線程中的上下文類加載器,那么上下文類加載器放的是什么加載器呢?

在sun.misc.Launcher中,我們找到了答案,在Launcher初始化的時(shí)候,會(huì)獲取AppClassLoader,然后將其設(shè)置為上下文類加載器,而這個(gè)AppClassLoader,就是之前上文提到的系統(tǒng)類加載器Application ClassLoader,所以上下文類加載器默認(rèn)情況下就是系統(tǒng)加載器。

以上就是淺談jvm雙親委派和破壞雙親委派的詳細(xì)內(nèi)容,更多關(guān)于jvm雙親委派的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • springboot增加注解緩存@Cacheable的實(shí)現(xiàn)

    springboot增加注解緩存@Cacheable的實(shí)現(xiàn)

    這篇文章主要介紹了springboot增加注解緩存@Cacheable的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • spring security獲取用戶信息的實(shí)現(xiàn)代碼

    spring security獲取用戶信息的實(shí)現(xiàn)代碼

    這篇文章主要介紹了spring security獲取用戶信息的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Spring Bean的包掃描的實(shí)現(xiàn)方法

    Spring Bean的包掃描的實(shí)現(xiàn)方法

    這篇文章主要介紹了Spring Bean的包掃描的實(shí)現(xiàn)方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • Spring框架配置java web實(shí)現(xiàn)實(shí)例化

    Spring框架配置java web實(shí)現(xiàn)實(shí)例化

    這篇文章主要介紹了Spring框架配置java web實(shí)現(xiàn)實(shí)例化,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Java將List轉(zhuǎn)換為String的幾種方式

    Java將List轉(zhuǎn)換為String的幾種方式

    我們大家在實(shí)際開發(fā)中經(jīng)常遇到List轉(zhuǎn)為String字符串的情況,下面這篇文章主要給大家介紹了關(guān)于Java將List轉(zhuǎn)換為String的幾種方式,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • @FeignClient?實(shí)現(xiàn)簡(jiǎn)便http請(qǐng)求封裝方式

    @FeignClient?實(shí)現(xiàn)簡(jiǎn)便http請(qǐng)求封裝方式

    這篇文章主要介紹了@FeignClient?實(shí)現(xiàn)簡(jiǎn)便http請(qǐng)求封裝方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • IDEA修改idea.vmoptions后,IDEA無法打開的解決方案

    IDEA修改idea.vmoptions后,IDEA無法打開的解決方案

    文章介紹了在IDEA中因錯(cuò)誤修改啟動(dòng)參數(shù)導(dǎo)致無法啟動(dòng)的問題,指出正確的修改文件位置應(yīng)在破解插件目錄下的idea.vmoptions,并分享了個(gè)人經(jīng)驗(yàn)供參考
    2025-10-10
  • HashMap vs TreeMap vs Hashtable vs LinkedHashMap

    HashMap vs TreeMap vs Hashtable vs LinkedHashMap

    這篇文章主要介紹了HashMap vs TreeMap vs Hashtable vs LinkedHashMap的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Maven Plugins報(bào)錯(cuò)的正確解決方案

    Maven Plugins報(bào)錯(cuò)的正確解決方案

    文章介紹了如何解決Maven插件報(bào)錯(cuò)的問題,建議在本地Maven倉庫目錄中刪除報(bào)錯(cuò)的插件文件,然后在IDEA中刷新Maven以重新加載,同時(shí),作者還提到了一個(gè)無效的方法,即通過修改Maven的setting.xml文件添加鏡像源
    2026-03-03
  • Java分頁查詢--分頁顯示(實(shí)例講解)

    Java分頁查詢--分頁顯示(實(shí)例講解)

    下面小編就為大家?guī)硪黄狫ava分頁查詢--分頁顯示(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08

最新評(píng)論

武宁县| 谢通门县| 隆化县| 平山县| 永昌县| 潢川县| 汉寿县| 遵义县| 蒙山县| 永嘉县| 临清市| 毕节市| 泸溪县| 江门市| 抚顺县| 秀山| 钦州市| 全南县| 辉南县| 苍溪县| 日照市| 监利县| 白山市| 墨竹工卡县| 淮北市| 南雄市| 康马县| 文成县| 洞头县| 淮北市| 遂平县| 高陵县| 祁阳县| 崇阳县| 凤山县| 威信县| 磐安县| 营山县| 平顶山市| 芜湖市| 通江县|