JVM中的雙親委派機制

描述

Java虛擬機對class文件採用的是按需加載的方式,需要使用該類時纔會將它的class文件加載到內存生成Class對象。加載某個類的class文件時採用的是雙親委派模式,即把請求交給父加載器處理,是一種任務委派模式

模型

在這裏插入圖片描述
)

原理

如果一個類加載器收到了類加載請求,且該類加載器存在父 類加載器,則委託給父類加載器執行,如果父類加載器還存在父類加載器則進一步向上委託,依次遞歸,最終到達引導類加載器。若父類加載器能夠完成加載則成功返回,否則子類加載器纔會嘗試加載

優點

避免類的重複加載;保護程序安全,防止核心API被隨意篡改

補充

引導類加載器(Bootstrap ClassLoader):使用C/C++實現,嵌套在JVM內部。用於加載Java核心類庫,如rt.jar、resources.jar或者sun.boot.class.path路徑下的內容等,只加載java、javax、sun等開頭的類。沒有父類加載器。
擴展類加載器(Extension ClassLoader):Java語言實現,派生自java.lang.ClassLoader類。用於加載java.ext.dirs系統屬性指定目錄下的類庫,或者JAVA_HOME/jre/lib/ext下的類庫,如果用戶創建的jar放在此目錄下,也會由擴展類加載器加載。父類加載器爲引導類加載器。
系統類加載器(Application ClassLoader):Java語言實現,派生自java.lang.ClassLoader類。用於加載環境變量classpath或系統屬性java.class.path指定路徑下的類庫,該類加載器是程序中默認的類加載器,一般情況下Java應用的類都是由它來完成。父類加載器爲擴展類加載器。

獲取類加載器的方法

clazz.getClassLoader()
Thread.currentThread().getContextClassLoader()
ClassLoader.getSystemClassLoader()
DriverManager.getCallerClassLoader()

類的繼承關係
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章