当前位置:网站首页>双亲委派机制
双亲委派机制
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()方法。很多第三方的依赖中的类加载时都会采用自定义加载器,以便实现环境隔离
边栏推荐
猜你喜欢
随机推荐
基于Visual Studio 2015的CUDA编程(一):基本配置
Scala的基础语法(小试牛刀)
BOM(Browser Object Model)浏览器对象模型相关概念
JSP技术
(三)文件操作之一——文件IO
2021年度总结——收获圆满的一年
VsCode更新后,怎么使用使用快捷键同时生成多个元素
一个简单的 erlang 的 udp 服务器和客户端
nvm详细安装步骤以及使用(window10系统)
【数据知多少】一文学懂通过Tushare、AKshare、baostock、Ashare、Pytdx获取股票行情数据(含代码)
Golang基础教程
C语言的基本程序结构详细讲解
8.0以上MySQL的常见错误
Mysql索引优化二
Golang学习(三十五) go 连接redis
【网络参考模型】
DOM —— 元素盒子模型
abstract和接口的基础知识
网络运维系列:GoDaddy Shell DDNS配置
【TCP 和 UDP 基本原理】









