双亲委派机制 详解(手画详图)面试高频 你值得拥有!!!
受多種情況的影響,又開始看JVM 方面的知識。
1、Java 實在過于內卷,沒法不往深了學。
2、面試題問的多,被迫學習。
3、純粹的好奇。
很喜歡一句話:“八小時內謀生活,八小時外謀發(fā)展。”
— 望別日與君相見時,君已有所成。
共勉
地點:湖南--小城市邵陽
作者:博主 🤸?♂?
雙親委派機制 詳解(手畫詳圖)面試高頻 你值得擁有!!!
- 一、概述
- 二、雙親委派機制原理
- 原理:
- 小故事
- 圖示:
- 代碼解釋:
- 三、雙親委派機制作用
- 自言自語
一、概述
? 雙親委派機制是當類加載器需要加載某一個.class字節(jié)碼文件時,則首先會把這個任務委托給他的上級類加載器,遞歸這個操作,如果上級沒有加載該.class文件,自己才會去加載這個.class。這是一種任務委派模式。
二、雙親委派機制原理
原理:
- 如果一個類加載器收到了要加載某個類的請求,它要做的首要事情不是加載,而是將這個請求委托給父類的加載器去執(zhí)行。
- 如果父類加載器還存在其父類加載器,則進一步向上委托,依次遞歸,請求最終將到達頂層的啟動類加載器;
- 如果父類加載器可以完成類加載任務,就成功返回,倘若父類加載器無法完成此加載任務,子加載器才會嘗試自己去加載,這就是雙親委派模式。
小故事
用一個小故事來加深大家的印象:
1、你看到餐桌上有個雞腿,看到麻麻非常幸苦。你就說:麻麻你次這個雞腿吧。麻麻又看到桌上的奶奶,就講媽:次這個雞腿補補身子吧。奶奶高興的說:我媳婦孝順啊,我今天也來嘗嘗這個孝順味道的雞腿啦。
2、你看到餐桌上有個雞腿,看到麻麻非常幸苦。你就說:麻麻你次這個雞腿吧。麻麻又看到桌上奶奶在,就講媽:次這個雞腿補補身子把。奶奶高興的說:我媳婦有這個孝順心就好了,你每天上班次外賣,對身體不好,這個雞腿給你次。麻麻拿到手上,又反手把雞腿夾給我,講:這個雞腿還是得你次,你現在正在長身體,不補一補長不高。???♂?
這就是雙親委派機制,不知道看完這個餐桌小故事,大家有沒有懂勒。
圖示:
代碼解釋:
我在我自己的項目中創(chuàng)建了 一個java.lang 的包 ,然后創(chuàng)建了一個 String 類。
再準備一個測試類,引用這個String類。
String 類 里面就一個靜態(tài)代碼塊。
代碼可以運行,輸出如下:
并沒有輸出我的String 里面的static 靜態(tài)代碼塊,證明使用的仍然是 jdk 自帶的。
原因是什么呢?
一步一步分析。
我們自定義一個類,你要想加載的話,應該是用 Application ClassLoader(系統類加載器、應用程序加載器)進行加載。但是這個時候又牽扯到了 雙親委派機制。
1、當我們要加載這個自定義String時,
2、先是讓應用程序加載器(Application ClassLoader)加載,但是發(fā)現它上面還有擴展類加載器(Extension ClassLoader)
3、接著委托給擴展類加載器(Extension ClassLoader),突然發(fā)現它上面還有Bootstrap ClassLoader (啟動類加載器)
4、就又接著委托到了Bootstrap ClassLoader (啟動類加載器)。啟動加載器一看,這不是 java.lang 包下的嗎,這是我的任務啊,急忙把他加載啦,然后成功返回。所以這里使用的 new String() 實際使用的還是 java 中 String。
這樣子可以防止什么樣問題的發(fā)生呢?
你想啊,你寫了一個項目,里面用了Jdk 核心類,像String.java,Integer.java,Date.java這種核心類,如果這種核心類能夠被隨意更改,第一、這很有可能導致整個項目的崩潰,第二、會影響到Java 虛擬機的穩(wěn)定性。
三、雙親委派機制作用
- 確保Java核心類庫的安全:所有的Java應用都至少會引用java.lang.Object類,也就是說在運行期,java.lang.Object類會被記載到Java虛擬機當中;如果這個加載過程是由Java應用自己的類加載器所完成的,那么可能會在JVM中存在多個版本的java.lang.Object類,而且這些類還是不兼容的、相互不可見的(因為命名空間的原因)。借助父親委托機制,Java核心類庫中的類的加載工作都是由啟動類加載器來統一完成的,從而確保了Java應用所使用的都是同一個版本的Java核心類庫,他們之間是互相兼容的。
- 確保Java核心類庫提供的類不會被自定義的類所替代。
- 不同的類加載器可以為相同名稱(binary name)的類創(chuàng)建額外的命名空間。相同名稱的類可以并存在Java虛擬機中,只需要用不同的類加載器來加他們即可,不同類加載器所加載的類是不兼容的,這就相當于在Java虛擬機內部創(chuàng)建了一個又一個相互隔離的Java類空間。
- 防止重復加載同一個.class。通過委托去向上面問一問,加載過了,就不用再加載一遍。保證數據安全。
自言自語
劃水的一篇哈,我們都加油,放肆愛!!!
一個玻璃展示罩的原木底座
共勉
總結
以上是生活随笔為你收集整理的双亲委派机制 详解(手画详图)面试高频 你值得拥有!!!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小学五年级就已经开始编程啦吗???
- 下一篇: JVM-虚拟机栈详解 附面试高频题 (手