1、双亲委托机制
在双亲委托机制中,各个加载器按照父子关系形成了树形结构(逻辑上的树形结构,并非继承关系),除了根类加载器之外,其余的类加载器都有且只有一个父加载器。
双亲委托机制的工作过程:
如果一个类加载器收到了类加载的请求,他首先不会自己去尝试加载这个类,而是把这个请求委托给父类加载器去完成,每一个层次的类加载器都是如此。因此所有的加载请求最终都应该传送到最顶层的根类加载器中。只有父类加载器反馈自己无法完成这个加载请求时,子类加载器才会尝试自己去完成加载。
2、例子:展示加载类的类加载器
public class MyTest7 {
public static void main(String[] args) throws ClassNotFoundException {
Class<?> aClass = Class.forName("java.lang.String");
System.out.println(aClass.getClassLoader());
Class<?> bClass = Class.forName("com.jvm.classloader.C");
System.out.println(bClass.getClassLoader());
}
}
class C {
}
结果:
null
sun.misc.Launcher$AppClassLoader@18b4aac2
可以看到,因为string类是由根加载器进行加载的,所以返回的是null。而C类则是由AppClassLoader进行加载的,即系统类加载器。