双亲委派机制

提到双亲委派机制,不得不提到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()方法。很多第三方的依赖中的类加载时都会采用自定义加载器,以便实现环境隔离

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值