面試官:java雙親委派機(jī)制及作用

什么是雙親委派機(jī)制

當(dāng)某個(gè)類加載器需要加載某個(gè).class文件時(shí)鱼填,它首先把這個(gè)任務(wù)委托給他的上級(jí)類加載器,遞歸這個(gè)操作,如果上級(jí)的類加載器沒有加載魁袜,自己才會(huì)去加載這個(gè)類。

類加載器的類別

BootstrapClassLoader(啟動(dòng)類加載器)

c++編寫敦第,加載java核心庫(kù) java.*,構(gòu)造ExtClassLoaderAppClassLoader峰弹。由于引導(dǎo)類加載器涉及到虛擬機(jī)本地實(shí)現(xiàn)細(xì)節(jié),開發(fā)者無(wú)法直接獲取到啟動(dòng)類加載器的引用申尼,所以不允許直接通過(guò)引用進(jìn)行操作

ExtClassLoader (標(biāo)準(zhǔn)擴(kuò)展類加載器)

java編寫垮卓,加載擴(kuò)展庫(kù),如classpath中的jre 师幕,javax.*或者
java.ext.dir 指定位置中的類粟按,開發(fā)者可以直接使用標(biāo)準(zhǔn)擴(kuò)展類加載器。

AppClassLoader(系統(tǒng)類加載器)

java編寫霹粥,加載程序所在的目錄灭将,如user.dir所在的位置的class

CustomClassLoader(用戶自定義類加載器)

java編寫,用戶自定義的類加載器,可加載指定路徑的class文件

源碼分析

protected Class<?> loadClass(String name, boolean resolve)
            throws ClassNotFoundException
    {
        synchronized (getClassLoadingLock(name)) {
            // 首先檢查這個(gè)classsh是否已經(jīng)加載過(guò)了
            Class<?> c = findLoadedClass(name);
            if (c == null) {
                long t0 = System.nanoTime();
                try {
                    // c==null表示沒有加載,如果有父類的加載器則讓父類加載器加載
                    if (parent != null) {
                        c = parent.loadClass(name, false);
                    } else {
                        //如果父類的加載器為空 則說(shuō)明遞歸到bootStrapClassloader了
                        //bootStrapClassloader比較特殊無(wú)法通過(guò)get獲取
                        c = findBootstrapClassOrNull(name);
                    }
                } catch (ClassNotFoundException e) {}
                if (c == null) {
                    //如果bootstrapClassLoader 仍然沒有加載過(guò)后控,則遞歸回來(lái)庙曙,嘗試自己去加載class
                    long t1 = System.nanoTime();
                    c = findClass(name);
                    sun.misc.PerfCounter.getParentDelegationTime().addTime(t1 - t0);
                    sun.misc.PerfCounter.getFindClassTime().addElapsedTimeFrom(t1);
                    sun.misc.PerfCounter.getFindClasses().increment();
                }
            }
            if (resolve) {
                resolveClass(c);
            }
            return c;
        }
    }

委派機(jī)制的流程圖

image.png

雙親委派機(jī)制的作用

1、防止重復(fù)加載同一個(gè).class浩淘。通過(guò)委托去向上面問一問捌朴,加載過(guò)了,就不用再加載一遍张抄。保證數(shù)據(jù)安全砂蔽。
2、保證核心.class不能被篡改署惯。通過(guò)委托方式左驾,不會(huì)去篡改核心.clas,即使篡改也不會(huì)去加載极谊,即使加載也不會(huì)是同一個(gè).class對(duì)象了诡右。不同的加載器加載同一個(gè).class也不是同一個(gè)Class對(duì)象。這樣保證了Class執(zhí)行安全轻猖。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末帆吻,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子咙边,更是在濱河造成了極大的恐慌桅锄,老刑警劉巖琉雳,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異友瘤,居然都是意外死亡翠肘,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門辫秧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)束倍,“玉大人,你說(shuō)我怎么就攤上這事盟戏⌒髅茫” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵柿究,是天一觀的道長(zhǎng)邮旷。 經(jīng)常有香客問我,道長(zhǎng)蝇摸,這世上最難降的妖魔是什么婶肩? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮貌夕,結(jié)果婚禮上律歼,老公的妹妹穿的比我還像新娘。我一直安慰自己啡专,他們只是感情好险毁,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著们童,像睡著了一般畔况。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上慧库,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天问窃,我揣著相機(jī)與錄音,去河邊找鬼完沪。 笑死,一個(gè)胖子當(dāng)著我的面吹牛嵌戈,可吹牛的內(nèi)容都是我干的覆积。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼熟呛,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼宽档!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起庵朝,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤吗冤,失蹤者是張志新(化名)和其女友劉穎又厉,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體椎瘟,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡覆致,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了肺蔚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片煌妈。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖宣羊,靈堂內(nèi)的尸體忽然破棺而出璧诵,到底是詐尸還是另有隱情,我是刑警寧澤仇冯,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布之宿,位于F島的核電站,受9級(jí)特大地震影響苛坚,放射性物質(zhì)發(fā)生泄漏比被。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一炕婶、第九天 我趴在偏房一處隱蔽的房頂上張望姐赡。 院中可真熱鬧,春花似錦柠掂、人聲如沸项滑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)枪狂。三九已至,卻和暖如春宋渔,著一層夾襖步出監(jiān)牢的瞬間州疾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工皇拣, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留严蓖,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓氧急,卻偏偏與公主長(zhǎng)得像颗胡,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子吩坝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 首先聲明毒姨,我是因?yàn)榭戳薎mportNew網(wǎng)站上的幾篇關(guān)于類加載器的文章之后,才萌生了寫這篇文章的想法钉寝。所以在寫這篇...
    java大哥閱讀 669評(píng)論 0 2
  • ClassLoader翻譯過(guò)來(lái)就是類加載器弧呐,普通的java開發(fā)者其實(shí)用到的不多闸迷,但對(duì)于某些框架開發(fā)者來(lái)說(shuō)卻非常常見...
    時(shí)待吾閱讀 1,064評(píng)論 0 1
  • 1、classLoader 類加載器俘枫,將class文件加載到JVM虛擬機(jī)內(nèi)存中腥沽,使得程序可以運(yùn)行。通常情況下崩哩,JV...
    helloWorld_1118閱讀 2,202評(píng)論 0 2
  • 首先聲明巡球,我是因?yàn)榭戳薎mportNew網(wǎng)站上的幾篇關(guān)于類加載器的文章之后,才萌生了寫這篇文章的想法邓嘹。所以在寫這篇...
    陳安妮annie1閱讀 256評(píng)論 0 1
  • 從社會(huì)現(xiàn)實(shí)來(lái)看 男人的社會(huì)地位更高 掌握更多資源 這既是男人綜合實(shí)力更強(qiáng)的結(jié)果 也是其表現(xiàn)
    孫世瑤兒閱讀 448評(píng)論 0 0