双亲委派机制

76 阅读1分钟

类加载器是用来把类加载到Java虚拟机中的一种东西。对于任意一个类,由它的类加载器和它的类本身确立其在JVM中的唯一性。其中类加载器分为启动类加载器、扩展类加载器、应用类加载器以及用户自定义加载器。其中启动类加载器负责核心类库的加载,比如java.lang.*等,扩展类加载器用于加载javahome中jre/lib/ext子目录的jar包,应用类加载器用来从环境变量中的classpath下加载类,用户自定义类通过继承ClassLoader类,实现findClass方法,来实现自定义的类加载器。

图像.png

  1. 双亲委派机制
  • 如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行;
  • 如果父类的加载器还存在其父类加载器,则进一步向上委托,依次递归请求最终将到达顶层的启动类加载器
  • 如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成此类加载任务,子类加载器才会尝试自己去加载。

优点:

  • 保护程序安全,防止恶意代码对程序破坏以及篡改核心API,比如用户自定义了一个String类,如果没有双亲委派机制,则会首先加载用户自定义的类,会对核心API进行篡改。
  • 避免类的重复加载,一个类只会被加载一次