当前位置:网站首页>双亲委派机制

双亲委派机制

2022-08-02 14:20:00 风吹起海棠

提到双亲委派机制,不得不提到ClassLoader类加载器,类加载器用于加载.class字节码到JVM中去执行。

JVM中包含3种加载器:

  • BootstrapClassLoader:引导类加载器加载%JAVA_HOME%/lib目录下的jar文件,比如rt.jar、resource.jar,该加载器由C++实现
  • ExtensionClassLoader:扩展类加载负责加载%JAVA_HOME%/lib/ext目录下的jar包和类,或者被java.ext.dirs系统变量所指定的路径下的jar包
  • ApplicationClassLoader:系统类加载器用于加载当前应用classpath下的所有jar包和类

双亲委派模型介绍:

其实双亲委派模型不如叫做父委托模型,系统中的classLoader在协同工作时会默认采用双亲委派模型进行类加载。在进行类加载的时候,首先会判断这个类是否已经被加载过,如果已经加载则直接返回,否则会将加载的操作交由父类加载器的loadClass()进行处理,所有的请求都会先交由顶层加载器BootstrapClassLoader加载,当父加载器无法加载时,再交由子加载器进行加载,实现加载操作的层层委派。当父类加载器都无法加载时,会交由用户自定义加载器进行加载。

 

双亲委派模型的好处:

尝试加载类的时候,让类加载检查是否会被加载,最终都会到达顶层加载器,这样可以避免类的重复加载

优先将类加载请求交由顶层加载器加载,当有一个需要加载类的包名和核心类一样时,就不会加载该类,这样可以保证防止因加载该类而破坏核心API,这也叫做JVM的沙箱安全机制。

如何自定义一个加载器:自定义加载器需要继承ClassLoader,重写loadClass()方法,如果想要打破双亲委派机制,就重写findClass()方法。很多第三方的依赖中的类加载时都会采用自定义加载器,以便实现环境隔离

原网站

版权声明
本文为[风吹起海棠]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_48649411/article/details/125792268