分析BootstrapClassLoader/ExtClassLoader/AppClassLoader的加载路径 及"父委托机制"
来源:互联网 发布:thinkpad 散热知乎 编辑:程序博客网 时间:2024/05/29 10:37
分析BootstrapClassLoader/ExtClassLoader/AppClassLoader的加载路径及"父委托机制"
import java.net.URL;import java.net.URLClassLoader;/*分析BootstrapClassLoader/ExtClassLoader/AppClassLoader的加载路径**/public class ClassPath_of_Bootstrap_Ext_AppClassLoader{public static void main(String[] args){System.out.println("BootstrapClassLoader 的加载路径: ");URL[] urls = sun.misc.Launcher.getBootstrapClassPath().getURLs();for(URL url : urls)System.out.println(url);System.out.println("----------------------------");//取得扩展类加载器URLClassLoader extClassLoader = (URLClassLoader)ClassLoader.getSystemClassLoader().getParent();System.out.println(extClassLoader);System.out.println("扩展类加载器 的加载路径: ");urls = extClassLoader.getURLs();for(URL url : urls)System.out.println(url);System.out.println("----------------------------");//取得应用(系统)类加载器URLClassLoader appClassLoader = (URLClassLoader)ClassLoader.getSystemClassLoader();System.out.println(appClassLoader);System.out.println("应用(系统)类加载器 的加载路径: ");urls = appClassLoader.getURLs();for(URL url : urls)System.out.println(url);System.out.println("----------------------------");}}
运行时输出如下:
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/
----------------------------
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) 方法查找类。
/////////-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- 分析BootstrapClassLoader/ExtClassLoader/AppClassLoader的加载路径 及"父委托机制"
- 分析BootstrapClassLoader/ExtClassLoader/AppClassLoader的加载路径 及"父委托机制"
- 分析BootstrapClassLoader/ExtClassLoader/AppClassLoader的加载路径 及"父委托机制"
- 分析AppClassLoader,ExtClassLoader 和URLClassLoader 的关系
- 分析AppClassLoader,ExtClassLoader 和URLClassLoader 的关系
- java类加载器-Bootstrap、 ExtClassLoader、 AppClassLoader的关系
- 分析Java的类加载器与ClassLoader(二):classpath与查找类字节码的顺序,分析ExtClassLoader与AppClassLoader的源码
- 类的加载及双亲委托机制
- 类加载器的父委托机制
- 类加载器的父委托机制
- 类加载器的父委托机制
- 黑马-------类加载器及其委托机制的深入分析
- 类加载器及其委托机制的深入分析
- 类加载器及其委托机制的深入分析
- 类加载器及其委托机制的深入分析
- 类加载器及其委托机制的深入分析
- 类的委托加载机制
- 类加载器及父亲委托机制
- [读写网] 2011 HTML5的六大趋势
- REST风格
- Mongodb嵌套查询及修改
- MFC文件操作大全(一)
- 论调用约定__stdcall,__cdecl,__fastcall,thiscall,naked call
- 分析BootstrapClassLoader/ExtClassLoader/AppClassLoader的加载路径 及"父委托机制"
- text to ps for printing
- 我对抽象类和接口的理解
- varnish常见错误的解决方法
- oracle HWM原因和解决方案(待完善)
- flex 移动开发
- linux文件系统权限
- Tomcat 系统架构与设计模式
- 利用jpeglib把bmp图片转为jpg