类加载机制

1.类的加载

类加载,将类的.class文件,二进制数据读入到内存中。放入运行时数据区的方法区内,在堆中创建class对象,来封装类在方法区的数据结构。
类加载分为: 加载 - 连接 - 初始化 - 使用 - 卸载
连接又分为 :验证 - 准备 - 解析
1)  加载过程
a. 通过类的全限定名(包名+类名 = 绝对路径)找到并获取二进制字节流
b. 把字节流对应的静态存储结构,转化为方法区的运行时数据结构
c. 在堆中生成,代表此类的class对象,是方法区中数据的访问入口
2)连接过程
  验证:文件格式、字节码、元数据、符号引用是不是符合要求。
  准备:为类的静态变量分配内存,初始化为默认值。
  解析:将符号引用(变量名)转换为直接引用(变量地址)
3) 初始化过程
	类的初始化,静态变量的赋值,静态代码块的执行等等

类加载流程图:
在这里插入图片描述

2.双亲委派模型

2.1 什么是双亲委派

我们写的代码都是运行在JVM中,而在把字节码加载到JVM时会有双亲委派机制
如图: 双亲委派加载器
在这里插入图片描述

App Class Loader : 加载程序员写的程序
Extensions Class Loader : 加载 jre/lib/ext/这里的jar
Boostrap Class Loader : 加载系统自带的类

如果一个类加载器收到了请求,首先不会自己加载。把请求委托给父加载器,依次向上,所有加载请求,都会传递到顶层的加载器中。只有当父加载器无法找到所需加载类的时候,子加载器才会自行加载。

2.2 双亲委派的作用(不重不漏)
是一种带有优先级的加载层次。
避免用户自定义类和系统类的加载冲突,达到统一和安全。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值