【JVM】浅谈双亲委派机制的缺陷及打破双亲委派机制
2022-11-17 15:49:32 TwelveT 332
平时做业务开发比较少接触类加载器,但是如果想深入学习Tomcat、Spring等开源项目,或者从事底层架构的开发,了解甚至熟悉类加载的原理是必不可少的。双签委派模型优缺点:优点避免重复加载,确保类的全局唯一性保护程序安全,防止核心api被随意篡改缺点由于加载范围限制,顶层的ClassLoader无法访问底层的Class...
平时做业务开发比较少接触类加载器,但是如果想深入学习Tomcat、Spring等开源项目,或者从事底层架构的开发,了解甚至熟悉类加载的原理是必不可少的。
双签委派模型优缺点:
优点
避免重复加载,确保类的全局唯一性
保护程序安全,防止核心api被随意篡改
缺点
由于加载范围限制,顶层的ClassLoader无法访问底层的ClassLoader所加载的类。
双签委派模型优缺点:
优点
避免重复加载,确保类的全局唯一性
保护程序安全,防止核心api被随意篡改
缺点
由于加载范围限制,顶层的ClassLoader无法访问底层的ClassLoader所加载的类。
为什么要破坏双亲委派模型
- Tomcat,应用的类加载器优先自行加载应用目录下的 class,并不是先委派给父加载器,加载不了才委派给父加载器。打破的目的是为了完成应用间的类隔离。
- JDK 9,Extension ClassLoader 被 Platform ClassLoader 取代,当平台及应用程序类加载器收到类加载请求,在委派给父加载器加载前,要先判断该类是否能够归属到某一个系统模块中,如果可以找到这样的归属关系,就要优先委派给负责那个模块的加载器完成加载。打破的原因,是为了添加模块化的特性。
- OSGi,实现模块化热部署,为每个模块都自定义了类加载器,需要更换模块时,模块与类加载器一起更换。其类加载的过程中,有平级的类加载器加载行为。打破的原因是为了实现模块热替换。
- JNDI 通过引入线程上下文类加载器,可以在 Thread.setContextClassLoader 方法设置,默认是应用程序类加载器,来加载 SPI 的代码。有了线程上下文类加载器,就可以完成父类加载器请求子类加载器完成类加载的行为。打破的原因,是为了 JNDI 服务的类加载器是启动器类加载,为了完成高级类加载器请求子类加载器(即上文中的线程上下文加载器)加载类。
免责声明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络收集整理,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!
![]() |
相关文章
-
12-20JVM 调优工具总结篇
-
12-19JVM 性能调优之 jstat
-
12-19JVM 性能调优之 jps
-
12-19JVM 性能调优之 jinfo