双亲委派机制

一、类的加载器:

1.启动类加载器(BootstrapClassLoader):

java的核心类库都是引导类加载器负责加载的。主要是调用底层C/C++的方法。不能被java程序获取到
没有父亲加载器
安装在JAVA_HOME/jre/lib/rt.jar、resources.jar或sun.boot.class.path路径下的内容
出于安全考虑,Bootstrap启动类加载器只加载包名为java、javax、sun等开头的类

2.扩展类加载器(ExtensionClassLoader):

用java 语言编写
派生与ClassLoader类
父类加载器为启动类加载器
jre/lib/ext子目录(扩展目录)下加载类库。如果用户创建的JAR放在此目录下,也会自动有扩展加载类加载。

3.应用程序类加载器(Application ClassLoader):

对于用户自定义来说,默认使用系统类加载器。
父类加载器为扩展类加载器
由于这个类加载器是ClassLoader中的getSystemClassLoader()方法的返回值。所以也称为系统加载器。

4.用户自定义类加载器(CustomClassLoader)

Java语言编写的,用户自定义类加载器,可以加载指定路径的class文件

二、双亲委派机制得工作过程:


1-类加载器收到类加载的请求;
2-把这个请求委托给父加载器去完成,一直向上委托,直到启动类加载器;
3-启动器加载器检查能不能加载(使用findClass()方法),能就加载(结束);否则,抛出异常,通知子加载器进行加载。
4-重复步骤三;

双亲委派机制的好处

通过我们自己写的java.lang.String这个类启动报错中,我们就可以得出以下双亲委派的优点:

1:保证了JVM提供的核心类不被篡改,保证class执行安全

比如String类,无论哪个加载器要加载这个类的话,由于双亲委派机制,最终都会交由最顶层的启动类加载器来加载,这样保证了string类在各种类加载器环境中,都是同一个类。如果没有双亲委派机制的话,各个加载器自己加载String类,有可能不同类加载器加载的String方法不一样,那样的话,我们的程序是不是就会一片混乱了。

2:防止重复加载同一个class

posted @   zwbsoft  阅读(31)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示