类加载器(ClassLoader)
主要负责动态加载Java类到Java虚拟机的内存空间中。类通常是按需加载,也就是第一次使用该类时才加载
双亲委派除了顶层的启动类加载器之外,其余加载器都应当有自己的父类加载器
一、什么是双亲委派
双亲委派模式是在Java 1.2后引入的,原理就是 如果一个类加载器收到类加载的请求,它不会自己先去加载,而是先把这个请求委托给他的父类加载器,如果他的父类加载器还有父类加载器,它就会进一步向上委托,直到委托到顶层的启动类加载器。如果父加载器可以加载这个类请求的话就会成功返回,反之,父加载器无法加载此任务,子类加载器才会尝试自己去加载。
二、双亲委派模型
双亲委派这种加载方式可以有效避免类的重复加载,如果父类加载器已经加载过,子ClassLoader就没有比要在重新加载一次了。
如果要通过网络传递一个伪造的类,通过双亲委派发现这个类已经被加载过,就不会重新加载传递过来的类,而是直接返回已经被加载过的类,便可以防止Java核心类被随意篡改。
向上委派到顶层加载器为止,向下查找找到发起加载的加载器为止。
委派到顶层后,如果缓存还是没有,则到加载路径中查找,有则加载返回,没有则继续向下查找。