分析BootstrapClassLoader/ExtClassLoader/AppClassLoader的加载路径 及父委托机制
生活随笔
收集整理的這篇文章主要介紹了
分析BootstrapClassLoader/ExtClassLoader/AppClassLoader的加载路径 及父委托机制
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
http://blog.csdn.net/irelandken/article/details/7048817
分析BootstrapClassLoader/ExtClassLoader/AppClassLoader的加載路徑及"父委托機制"[java] view plaincopyprint?
運行時輸出如下:
BootstrapClassLoader 的加載路徑:?
file:/C:/jdk1.7.0_01/jre/lib/resources.jar
file:/C:/jdk1.7.0_01/jre/lib/rt.jar
file:/C:/jdk1.7.0_01/jre/lib/sunrsasign.jar
file:/C:/jdk1.7.0_01/jre/lib/jsse.jar
file:/C:/jdk1.7.0_01/jre/lib/jce.jar
file:/C:/jdk1.7.0_01/jre/lib/charsets.jar
file:/C:/jdk1.7.0_01/jre/classes
----------------------------
sun.misc.Launcher$ExtClassLoader@3e389405
擴展類加載器 的加載路徑:?
file:/C:/jdk1.7.0_01/jre/lib/ext/dnsns.jar
file:/C:/jdk1.7.0_01/jre/lib/ext/localedata.jar
file:/C:/jdk1.7.0_01/jre/lib/ext/sunec.jar
file:/C:/jdk1.7.0_01/jre/lib/ext/sunjce_provider.jar
file:/C:/jdk1.7.0_01/jre/lib/ext/sunmscapi.jar
file:/C:/jdk1.7.0_01/jre/lib/ext/zipfs.jar
----------------------------
sun.misc.Launcher$AppClassLoader@a200d0c
應用(系統)類加載器 的加載路徑:?
file:/E:/JAVA/JVM_Class_Reflect_Thread/ClassPath_of_Bootstrap_Ext_AppClassLoader/bin/
----------------------------
現在我們就知道了這三個類加載器的加載路徑了:
- BootstrapClassLoader ? ? ? ? ? ? ? ? ?---加載jre/目錄下的核心庫
- ExtClassLoader擴展類加載器 ? ? ? ? ? ? ?---加載/jre/lib/ext/目錄下的擴展包
- AppClassLoader應用(系統)類加載器 ? ? ? ?---加載CLASSPATH路徑下的包
JDK源代碼中,protected Class<?> loadClass(String name, boolean resolve)?方法?
已經很好地體現出"父親委托機制":
? ??
1:先調用parent.loadClass(name, false)
? ??
2:如果父親加載失敗,則調用?loadClass(name, false)?方法 查找"當前類加載器"對應的"目錄"來加載
? ? ?
public Class<?>loadClass(String?name,?boolean resolve)
此方法的默認實現將按以下順序搜索類:
? ??
1.調用?findLoadedClass(name)?來檢查是否已經加載類。
? ?
2.在父類加載器上調用 loadClass方法。如果父類加載器為 null,則使用虛擬機的內置類加載器。
? ?
3.調用?findClass(name)?方法查找類。
/-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
PS: 如果用戶想從自定義的目錄下加載類(.class文件),則可以自定義類加載器:
?
總結
以上是生活随笔為你收集整理的分析BootstrapClassLoader/ExtClassLoader/AppClassLoader的加载路径 及父委托机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开源 JVM 一览
- 下一篇: JVM类加载机制(ClassLoader