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

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

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

雙親委派模型

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

為什么需要雙親委派

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

雙親委派好處

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

缺點(diǎn):

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

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

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

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

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

破壞雙親委派

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

因?yàn)樵谀承┣闆r下父類加載器需要委托子類加載器去加載class文件。受到加載范圍的限制,父類加載器無(wú)法加載到需要的文件,以Driver接口為例,由于Driver接口定義在jdk當(dāng)中的,而其實(shí)現(xiàn)由各個(gè)數(shù)據(jù)庫(kù)的服務(wù)商來(lái)提供,比如mysql的就寫(xiě)了MySQL Connector,那么問(wèn)題就來(lái)了,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)類加載器來(lái)委托子類來(lái)加載Driver實(shí)現(xiàn),從而破壞了雙親委派,這里僅僅是舉了破壞雙親委派的其中一個(gè)情況。

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

我們結(jié)合Driver來(lái)看一下在spi(Service Provider Inteface)中如何實(shí)現(xiàn)破壞雙親委派。
先從DriverManager開(kāi)始看,平時(shí)我們通過(guò)DriverManager來(lái)獲取數(shù)據(jù)庫(kù)的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)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Spring Bean的包掃描的實(shí)現(xiàn)方法

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

    這篇文章主要介紹了Spring Bean的包掃描的實(shí)現(xiàn)方法,本文通過(guò)實(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í)例化,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Java將List轉(zhuǎn)換為String的幾種方式

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

    我們大家在實(shí)際開(kāi)發(fā)中經(jīng)常遇到List轉(zhuǎn)為String字符串的情況,下面這篇文章主要給大家介紹了關(guān)于Java將List轉(zhuǎn)換為String的幾種方式,文中通過(guò)實(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無(wú)法打開(kāi)的解決方案

    IDEA修改idea.vmoptions后,IDEA無(wú)法打開(kāi)的解決方案

    文章介紹了在IDEA中因錯(cuò)誤修改啟動(dòng)參數(shù)導(dǎo)致無(wú)法啟動(dòng)的問(wèn)題,指出正確的修改文件位置應(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ò)的問(wèn)題,建議在本地Maven倉(cāng)庫(kù)目錄中刪除報(bào)錯(cuò)的插件文件,然后在IDEA中刷新Maven以重新加載,同時(shí),作者還提到了一個(gè)無(wú)效的方法,即通過(guò)修改Maven的setting.xml文件添加鏡像源
    2026-03-03
  • Java分頁(yè)查詢--分頁(yè)顯示(實(shí)例講解)

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

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

最新評(píng)論

松潘县| 大余县| 通城县| 油尖旺区| 湘阴县| 正阳县| 无棣县| 鲁山县| 海南省| 武城县| 邢台市| 青铜峡市| 图木舒克市| 德昌县| 安丘市| 黑龙江省| 安溪县| 邯郸市| 平塘县| 辽宁省| 南城县| 邵武市| 陆良县| 万年县| 岚皋县| 邵东县| 潜山县| 青河县| 新郑市| 普洱| 博爱县| 长治县| 定安县| 伽师县| 定南县| 高雄市| 吉安市| 应城市| 屏东县| 法库县| 兴化市|