日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

双亲委派机制 详解(手画详图)面试高频 你值得拥有!!!

發(fā)布時間:2025/3/19 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 双亲委派机制 详解(手画详图)面试高频 你值得拥有!!! 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

受多種情況的影響,又開始看JVM 方面的知識。

1、Java 實(shí)在過于內(nèi)卷,沒法不往深了學(xué)。

2、面試題問的多,被迫學(xué)習(xí)。

3、純粹的好奇。
很喜歡一句話:“八小時內(nèi)謀生活,八小時外謀發(fā)展。
— 望別日與君相見時,君已有所成。
共勉

地點(diǎn):湖南--小城市邵陽

作者:博主 🤸?♂?

雙親委派機(jī)制 詳解(手畫詳圖)面試高頻 你值得擁有!!!

    • 一、概述
    • 二、雙親委派機(jī)制原理
      • 原理:
      • 小故事
      • 圖示:
      • 代碼解釋:
    • 三、雙親委派機(jī)制作用
    • 自言自語

一、概述

? 雙親委派機(jī)制是當(dāng)類加載器需要加載某一個.class字節(jié)碼文件時,則首先會把這個任務(wù)委托給他的上級類加載器,遞歸這個操作,如果上級沒有加載該.class文件,自己才會去加載這個.class。這是一種任務(wù)委派模式。

二、雙親委派機(jī)制原理

原理:

  • 如果一個類加載器收到了要加載某個類的請求,它要做的首要事情不是加載,而是將這個請求委托給父類的加載器去執(zhí)行。
  • 如果父類加載器還存在其父類加載器,則進(jìn)一步向上委托,依次遞歸,請求最終將到達(dá)頂層的啟動類加載器;
  • 如果父類加載器可以完成類加載任務(wù),就成功返回,倘若父類加載器無法完成此加載任務(wù),子加載器才會嘗試自己去加載,這就是雙親委派模式。

小故事

用一個小故事來加深大家的印象:

1、你看到餐桌上有個雞腿,看到麻麻非常幸苦。你就說:麻麻你次這個雞腿吧。麻麻又看到桌上的奶奶,就講媽:次這個雞腿補(bǔ)補(bǔ)身子吧。奶奶高興的說:我媳婦孝順啊,我今天也來嘗嘗這個孝順味道的雞腿啦。

2、你看到餐桌上有個雞腿,看到麻麻非常幸苦。你就說:麻麻你次這個雞腿吧。麻麻又看到桌上奶奶在,就講媽:次這個雞腿補(bǔ)補(bǔ)身子把。奶奶高興的說:我媳婦有這個孝順心就好了,你每天上班次外賣,對身體不好,這個雞腿給你次。麻麻拿到手上,又反手把雞腿夾給我,講:這個雞腿還是得你次,你現(xiàn)在正在長身體,不補(bǔ)一補(bǔ)長不高。???♂?

這就是雙親委派機(jī)制,不知道看完這個餐桌小故事,大家有沒有懂勒。

圖示:

代碼解釋:

我在我自己的項(xiàng)目中創(chuàng)建了 一個java.lang 的包 ,然后創(chuàng)建了一個 String 類。

再準(zhǔn)備一個測試類,引用這個String類。

String 類 里面就一個靜態(tài)代碼塊。

代碼可以運(yùn)行,輸出如下:

并沒有輸出我的String 里面的static 靜態(tài)代碼塊,證明使用的仍然是 jdk 自帶的。

原因是什么呢?

一步一步分析。

我們自定義一個類,你要想加載的話,應(yīng)該是用 Application ClassLoader(系統(tǒng)類加載器、應(yīng)用程序加載器)進(jìn)行加載。但是這個時候又牽扯到了 雙親委派機(jī)制。

1、當(dāng)我們要加載這個自定義String時,

2、先是讓應(yīng)用程序加載器(Application ClassLoader)加載,但是發(fā)現(xiàn)它上面還有擴(kuò)展類加載器(Extension ClassLoader)

3、接著委托給擴(kuò)展類加載器(Extension ClassLoader),突然發(fā)現(xiàn)它上面還有Bootstrap ClassLoader (啟動類加載器)

4、就又接著委托到了Bootstrap ClassLoader (啟動類加載器)。啟動加載器一看,這不是 java.lang 包下的嗎,這是我的任務(wù)啊,急忙把他加載啦,然后成功返回。所以這里使用的 new String() 實(shí)際使用的還是 java 中 String。

這樣子可以防止什么樣問題的發(fā)生呢?

你想啊,你寫了一個項(xiàng)目,里面用了Jdk 核心類,像String.java,Integer.java,Date.java這種核心類,如果這種核心類能夠被隨意更改,第一、這很有可能導(dǎo)致整個項(xiàng)目的崩潰,第二、會影響到Java 虛擬機(jī)的穩(wěn)定性。

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

  • 確保Java核心類庫的安全:所有的Java應(yīng)用都至少會引用java.lang.Object類,也就是說在運(yùn)行期,java.lang.Object類會被記載到Java虛擬機(jī)當(dāng)中;如果這個加載過程是由Java應(yīng)用自己的類加載器所完成的,那么可能會在JVM中存在多個版本的java.lang.Object類,而且這些類還是不兼容的、相互不可見的(因?yàn)槊臻g的原因)。借助父親委托機(jī)制,Java核心類庫中的類的加載工作都是由啟動類加載器來統(tǒng)一完成的,從而確保了Java應(yīng)用所使用的都是同一個版本的Java核心類庫,他們之間是互相兼容的。
  • 確保Java核心類庫提供的類不會被自定義的類所替代。
  • 不同的類加載器可以為相同名稱(binary name)的類創(chuàng)建額外的命名空間。相同名稱的類可以并存在Java虛擬機(jī)中,只需要用不同的類加載器來加他們即可,不同類加載器所加載的類是不兼容的,這就相當(dāng)于在Java虛擬機(jī)內(nèi)部創(chuàng)建了一個又一個相互隔離的Java類空間。
  • 防止重復(fù)加載同一個.class。通過委托去向上面問一問,加載過了,就不用再加載一遍。保證數(shù)據(jù)安全。

自言自語

劃水的一篇哈,我們都加油,放肆愛!!!

一個玻璃展示罩的原木底座

共勉

總結(jié)

以上是生活随笔為你收集整理的双亲委派机制 详解(手画详图)面试高频 你值得拥有!!!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。