【JVM虛擬機】類加載器的說明

類加載器分爲4種類型

加載器 說明
Bootstrp loader Bootstrp加載器是用C++語言寫的,它是在Java虛擬機啓動後初始化的,它主要負責加載%JAVA_HOME%/jre/lib,-Xbootclasspath參數指定的路徑以及%JAVA_HOME%/jre/classes中的類
ExtClassLoader Bootstrp loader加載ExtClassLoader,並且將ExtClassLoader的父加載器設置爲Bootstrp loader.ExtClassLoader是用Java寫的,具體來說就是 sun.misc.Launcher$ExtClassLoader,ExtClassLoader主要加載%JAVA_HOME%/jre/lib/ext,此路徑下的所有classes目錄以及java.ext.dirs系統變量指定的路徑中類庫。
AppClassLoader Bootstrp loader加載完ExtClassLoader後,就會加載AppClassLoader,並且將AppClassLoader的父加載器指定爲 ExtClassLoader。AppClassLoader也是用Java寫成的,它的實現類是 sun.misc.Launcher$AppClassLoader,另外我們知道ClassLoader中有個getSystemClassLoader方法,此方法返回的正是AppclassLoader.AppClassLoader主要負責加載classpath所指定的位置的類或者是jar文檔,它也是Java程序默認的類加載器。
用戶自定義加載器 加載自定義的類

雙親委派機制

在這裏插入圖片描述

比如當我們自定義的Class A 需要被加載的時候,
AppClassLoader會交給父級ExtClassLoader 去加載,而ExtClassLoader 會交給父級Bootstrp loader加載,當父級的Bootstrp loader加載不了的話,會交給子級ExtClassLoader加載,加載不了的話,交給子級AppClassLoader去加載,如果還是加載不了的話,就拋出異常

注意: 父級加載器看不到子類加載器,然後子類加載器可以看到父類的加載器

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