什么是雙親委派機制?


了解雙親委派,需要先了解下JAVA的類加載器ClassLoader,java的類加載器主要有以下幾種

 

 

什么是類加載器?

類加載器是jre的一部分,負責動態將類添加到Java虛擬機。

類加載分類

1、啟動類加載器 bootstrap classloader :加載jre/lib/rt.jar

2、擴展類加載器 extension classloader :加載jre/lib/ext/*.jar

3、應用程序類加載器 application classloader:加載classpath上指定的類庫

雙親委派機制

  雙親委派機制是指當一個類加載器收到一個類加載請求時,該類加載器首先會把請求委派給父類加載器。每個類加載器都是如此,只有在父類加載器在自己的搜索范圍內找不到指定類時,子類加載器才會嘗試自己去加載。

雙親委派模型工作工程:

  1.當Application ClassLoader 收到一個類加載請求時,他首先不會自己去嘗試加載這個類,而是將這個請求委派給父類加載器Extension ClassLoader去完成。  

  2.當Extension ClassLoader收到一個類加載請求時,他首先也不會自己去嘗試加載這個類,而是將請求委派給父類加載器Bootstrap ClassLoader去完成。  

  3.如果Bootstrap ClassLoader加載失敗(在<JAVA_HOME>\lib中未找到所需類),就會讓Extension ClassLoader嘗試加載。  

  4.如果Extension ClassLoader也加載失敗,就會使用Application ClassLoader加載。  

  5.如果Application ClassLoader也加載失敗,就會使用自定義加載器去嘗試加載。  

  6.如果均加載失敗,就會拋出ClassNotFoundException異常。

例子:

  當一個Hello.class這樣的文件要被加載時。不考慮我們自定義類加載器,首先會在AppClassLoader中檢查是否加載過,如果有那就無需再加載了。如果沒有,那么會拿到父加載器,然后調用父加載器的loadClass方法。父類中同理會先檢查自己是否已經加載過,如果沒有再往上。注意這個過程,直到到達Bootstrap classLoader之前,都是沒有哪個加載器自己選擇加載的。如果父加載器無法加載,會下沉到子加載器去加載,一直到最底層,如果沒有任何加載器能加載,就會拋出ClassNotFoundException。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM