jvm 雙親委派機制

2022-09-17 18:54:09 字數 1668 閱讀 6331

1 概述

2 工作原理

3 圖例和類載入器介紹

4 **演示

5 優勢

** : 

j**a虛擬機器堆class檔案採用的是按需載入的方式,也就是說當需要使用該類時才會將他的class檔案載入到記憶體生成class物件,而且載入某個類的class檔案時,j**a虛擬機器採用的是雙親委派機制,即把請求交由父類處理,他是一種任務委派模式

如果乙個類載入器收到了類載入的請求,它並不會自己先去載入,而是把這個請求委託給父類的載入器去執行;

如果父類載入器還存在其父類載入器,則進一步向上委託,依次遞迴,請求最終將到達頂層的啟動類載入器;

如果父類載入器可以完成類載入任務,就成功返回,倘若父類載入器無法完成次載入任務,子類載入器才會嘗試自己去載入,這就是雙親委派模式;

/*控制台輸出:

錯誤: 在類 j**a.lang.string 中找不到 main 方法, 請將 main 方法定義為:

public static void main(string args)

原因是:

j**a.lang.string 類由 引導類載入器 bootstrap classloader 載入, 實際載入的不是自定的string類,而是jdk類庫中的string類,

所以靜態**塊未執行,

並且jdk中的string類沒有main方法,所以報錯

*/}

package j**a.lang;

/*** @classname mytest

* @description

* @author xiaodu

* @date 2020/7/9 10:45

**/public class mytest

/*控制台輸出:

j**a.lang.securityexception: prohibited package name: j**a.lang

at j**a.lang.classloader.predefineclass(classloader.j**a:662)

...原因:

引導類載入器 bootstrap classloader,不允許自定義的類使用j**a.lang包名,出於對核心api的保護

*/}

保護程式安全,防止核心api被隨意篡改

沙箱安全機制: 自定義string類,但是在載入自定義string類時會率先使用引導類載入器載入,而引導類載入器在載入工程中,會先載入jdk自帶的檔案(rt.jar包中的j**a/lang/string.class),報錯資訊說沒有main方法,就是因為載入的rt.jar中的string類,這樣可以保護對j**a核心源**的保護,這就是沙箱安全機制

JVM 雙親委派機制

雙親委派機制是在類載入的時候出現的一種機制 一 如果沒有第三方jar包 此時雙親委派機制的原理是 當對類進行載入的時候,會從系統類載入器 拓展類載入器 引導類載入器,一直向其父類尋找,呼叫的是父類的類載入器,此時的雙親委派機制是成功的。二 如果有第三方的jar包 如圖所示 由於引入了第三方的jar包...

JVM雙親委派機制

首先我們要了解什麼是類載入器,說白了就是 把類通過類載入器載入到jvm中,然後轉換成class物件 通過類的全路徑來找到這個類 雙親委派機制,意思就是 這有乙個類,但是他自己的類載入器不去載入,而是讓其父類載入器載入 讓上級載入器載入 只有當父類載入器找不到這個類的時候,子類載入器才會去載入 那麼 ...

什麼是雙親委派機制?

雙親委派機制 雙親委派機制是指當乙個類載入器收到乙個類載入請求時,該類載入器首先會把請求委派給父類載入器。每個類載入器都是如此,只有在父類載入器在自己的搜尋範圍內找不到指定類時,子類載入器才會嘗試自己去載入。雙親委派模型工作工程 2.當extension classloader收到乙個類載入請求時,...