双亲委派模型
温馨提示:
本文最后更新于 2022年12月16日,已超过 873 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
什么是双亲委派模型
原理:当一个类加载器收到类加载任务时,会先交给自己的父加载器去完成,因此最终加载任务都会传递到最顶层的BootstrapClassLoader,只有当父加载器无法完成加载任务时,才会尝试自己来加载。
一个类是由加载它的类加载器和这个类本身来共同确定其在Java虚拟机中的唯一性。
类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次递归,
如果父类加载器可以完成类加载任务,就成功返回;
只有父类加载器无法完成此加载任务时,才自己去加载
双亲委派模型的优势
避免类的重复加载
每次进行类加载时,都尽可能由顶层的加载器进行加载,保证父类加载器已经加载过的类,不会被子类再加载一次,同一个类都由同一个类加载器进行加载,避免了类的重复加载。
防止系统类被恶意修改
通过双亲委派模型机制,能保证系统类由系统类加载器进行加载(Bootstrap ClassLoader)后,用户即使定义了与系统类相同的类,也不会进行加载,保证了安全性。
如何破坏双亲委派模型
某些情况下,需要由子类加载器去加载class文件,这时就需要破坏双亲委派模型。要破坏双亲委派模型,可以通过重写ClassLoader类的loadClass()方法实现。
注:破坏双亲委派模型过程中的坑也不少!典型的打破双亲委派模型的例子有Tomcat与OSGI.
正文到此结束
- 本文标签: JVM 双亲委派模型
- 本文链接: http://www.ityoulove.com/article/35
- 版权声明: 本文由崔健宇原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权