国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java: classLoader

bovenson / 2657人閱讀

摘要:如果它們都沒有加載到這個類時,則拋出異常。只有兩者同時滿足的情況下,才認(rèn)為這兩個是相同的。就算兩個是同一份字節(jié)碼,如果被兩個不同的實例所加載,也會認(rèn)為它們是兩個不同。

簡介

程序在啟動的時候,并不會一次性加載程序所要用的所有class文件,而是根據(jù)程序的需要,通過Java的類加載機制(ClassLoader)來動態(tài)加載某個class文件到內(nèi)存當(dāng)中的,從而只有class文件被載入到了內(nèi)存之后,才能被其它class所引用。所以ClassLoader就是用來動態(tài)加載class文件到內(nèi)存當(dāng)中用的。

默認(rèn)的類加載器 BootStrap ClassLoader

Java類加載層次中最頂層的類加載器,負(fù)責(zé)加載JDK中的核心類庫。

Extension ClassLoader

擴展類加載器,負(fù)責(zé)加載Java的擴展類庫,默認(rèn)加載JAVA_HOME/jre/lib/ext/目下的所有jar

App ClassLoader

系統(tǒng)類加載器,負(fù)責(zé)加載應(yīng)用程序classpath目錄下的所有jar和class文件

ClassLoader加載類的原理 原理介紹

ClassLoader使用的是雙親委托模型來搜索類的,每個ClassLoader實例都有一個父類加載器的引用(不是繼承的關(guān)系,是一個包含的關(guān)系),虛擬機內(nèi)置的類加載器(Bootstrap ClassLoader)本身沒有父類加載器,但可以用作其它ClassLoader實例的的父類加載器。當(dāng)一個ClassLoader實例需要加載某個類時,它會試圖親自搜索某個類之前,先把這個任務(wù)委托給它的父類加載器,這個過程是由上至下依次檢查的,首先由最頂層的類加載器Bootstrap ClassLoader試圖加載,如果沒加載到,則把任務(wù)轉(zhuǎn)交給Extension ClassLoader試圖加載,如果也沒加載到,則轉(zhuǎn)交給App ClassLoader 進(jìn)行加載,如果它也沒有加載得到的話,則返回給委托的發(fā)起者,由它到指定的文件系統(tǒng)或網(wǎng)絡(luò)等URL中加載該類。如果它們都沒有加載到這個類時,則拋出ClassNotFoundException異常。否則將這個找到的類生成一個類的定義,并將它加載到內(nèi)存當(dāng)中,最后返回這個類在內(nèi)存中的Class實例對象。

使用雙親委托模型可以避免重復(fù)加載,當(dāng)父親已經(jīng)加載了該類的時候,就沒有必要子ClassLoader再加載一次。考慮到安全因素,我們試想一下,如果不使用這種委托模式,那我們就可以隨時使用自定義的String來動態(tài)替代java核心api中定義的類型,這樣會存在非常大的安全隱患,而雙親委托的方式,就可以避免這種情況,因為String已經(jīng)在啟動時就被引導(dǎo)類加載器(Bootstrcp ClassLoader)加載,所以用戶自定義的ClassLoader永遠(yuǎn)也無法加載一個自己寫的String,除非你改變JDK中ClassLoader搜索類的默認(rèn)算法。

JVM在判定兩個class是否相同時,不僅要判斷兩個類名是否相同,而且要判斷是否由同一個類加載器實例加載的。只有兩者同時滿足的情況下,JVM才認(rèn)為這兩個class是相同的。就算兩個class是同一份class字節(jié)碼,如果被兩個不同的ClassLoader實例所加載,JVM也會認(rèn)為它們是兩個不同class。

引用

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/70183.html

相關(guān)文章

  • 淺談java classloader

    摘要:類加載器三杰有三類,分別是以及。線程上下文類加載器線程上下文類加載器可以不遵循雙親委派機制。免費領(lǐng)取驗證碼內(nèi)容安全短信發(fā)送直播點播體驗包及云服務(wù)器等套餐更多網(wǎng)易技術(shù)產(chǎn)品運營經(jīng)驗分享請訪問網(wǎng)易云社區(qū)。文章來源網(wǎng)易云社區(qū) 本文由作者張遠(yuǎn)道授權(quán)網(wǎng)易云社區(qū)發(fā)布。 類加載器三杰 jvm有三類classloader,分別是bootstrap classloader,extended classlo...

    liuyix 評論0 收藏0
  • 詳細(xì)深入分析 Java ClassLoader 工作機制

    摘要:作用負(fù)責(zé)將加載到中審查每個類由誰加載父優(yōu)先的等級加載機制將字節(jié)碼重新解析成統(tǒng)一要求的對象格式類結(jié)構(gòu)分析為了更好的理解類的加載機制,我們來深入研究一下和他的方法。就算兩個是同一份字節(jié)碼,如果被兩個不同的實例所加載,也會認(rèn)為它們是兩個不同。 申明:本文首發(fā)于 詳細(xì)深入分析 ClassLoader 工作機制 ,如有轉(zhuǎn)載,注明原出處即可,謝謝配合。 什么是 ClassLoader ? 大家...

    mdluo 評論0 收藏0
  • 貓頭鷹的深夜翻譯:理解javaclassloader

    摘要:它們是通過來自遠(yuǎn)程的服務(wù)器的連接發(fā)送字節(jié)碼并在本地運行,這一點令人興奮。中有一個自定義的,它不是從本地文件系統(tǒng)加載類文件,而是從遠(yuǎn)程服務(wù)器上獲取,通過加載原始字節(jié)碼,再在中轉(zhuǎn)化為類。它將字節(jié)碼解析為運行時的數(shù)據(jù)結(jié)構(gòu),檢查其有效性等。 前言 Java ClassLoader是java運行系統(tǒng)中一個至關(guān)重要但是經(jīng)常被忽略的組件。它負(fù)責(zé)在運行時尋找并加載類文件。創(chuàng)建自定義的ClassLoad...

    Eminjannn 評論0 收藏0
  • 深入Spring Boot:ClassLoader的繼承關(guān)系和影響

    摘要:的打包結(jié)構(gòu)改動是這個引入的這個的本意是簡化的繼承關(guān)系,以一種直觀的優(yōu)先的方式來實現(xiàn),同時打包結(jié)構(gòu)和傳統(tǒng)的包應(yīng)用更接近。目前的繼承關(guān)系帶來的一些影響有很多用戶可能會發(fā)現(xiàn),一些代碼在里跑得很好,但是在實際部署運行時不工作。 前言 對spring boot本身啟動原理的分析,請參考:http://hengyunabc.github.io/s... Spring boot里的ClassLoad...

    lifesimple 評論0 收藏0
  • Java反射-動態(tài)類加載和重新加載

    摘要:示例如下動態(tài)類重新加載動態(tài)類重新加載有一些挑戰(zhàn)。為了上面代碼的正常運行,你當(dāng)然需要實現(xiàn)自己的類加載器,讓接口或超類由其父類加載。 Java中可以在運行時加載和重新加載類,雖然并不像我們想像中那么簡單。本文將解釋何時、怎樣在Java中加載、重新加載類。你可以爭論動態(tài)加載類是Java反射的一部分還是Java核心的一部分。不管怎樣,我把它放在了Java反射中,因為沒有更好的地方放置它。 類加...

    nodejh 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<