类加载过程,以及什么是双亲委派?

本文详细介绍了Java类加载的过程,包括加载、验证、准备、解析、初始化、使用和卸载七个阶段。类加载器分为Bootstrap、Extension和Application三类,各自负责加载不同路径的类。双亲委派模型确保了类加载的安全性和避免重复加载,防止用户自定义类覆盖核心类库。该机制下,加载请求会从顶层加载器开始,逐层向下委托,直到找到合适的类。
摘要由CSDN通过智能技术生成

类的加载机制

1

如图,我们自己写的Java文件到最终运行,它必须要经过编译和类加载这两个阶段,
而编译的过程就是.java文件编译成.class文件,而类的加载就是把.class文件加载到JVM内存里面,装载完成以后会得到一个Class对象,我们就可以使用new关键字,来实例化这个对象。
4

一个类从被加载到虚拟机内存中开始,到卸载出内存,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶段。

而类的加载过程涉及到类加载器,JVM在运行过程的时候会产生三个类加载器
2
这三个类加载器呢,组成一个层级关系,每一个类加载器,分别去加载不同作用范围的jar包,比如说Bootstrap、ClassLoader,它主要是负责Java核心类库的加载,也就是%{jJDK_HOME}\lib下面的rt.jarresources.jar等等的,Extension ClassLoader主要负责%{jJDK_HOME}\lib\ext目录下的一个jar包和class文件,Application ClassLoader主要负责当前应用里面classpath下面的所有jar包和类文件,除了系统自己提供的类加载器以为,还可以通过ClassLoader类来实现自定义加载器,去满足一些特殊的场景需求

双亲委派

3
而所谓的双亲委派,就是按照类加载器的层级关系,逐层进行委派,比如说当我们需要加载一个class文件,首先会去吧这个class文件的查询和加载委派给父加载器去执行,如果父加载器都无法加载,那么再尝试自己来加载这样一个class。

双亲委派设计的好处
  1. 安全性,因为这种层级关系,实际上代表的是一种优先级,也就是所有的类加载,优先要给到Bootstrap ClassLoader,那么对于核心类库中的一些类,就没有办法被破坏,比如说自己写一个java.lang,String,最终还是会交给启动类加载器,再加上每个类加载器的本身一个作用范围,那么自己写的java.lang,String就没有办法覆盖类库中的类。
  2. 避免重复加载导致程序混乱,因为如果父加载器已经加载过了,那么子加载器就没有必要再去加载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

请叫我黄同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值