java虚拟机类加载机制

一 类加载机制
虚拟机把Class文件加载到内存中,并对数据进行验证、准备、解析、初始化,最终形成可以被虚拟机使用的java类型,这就是类加载机制。

二 类加载过程
5个阶段: 加载 验证 准备 解析 初始化
在这里插入图片描述

1 加载
加载后的产物:生成类的二进制字节流

2 验证
1)目的
检查class文件字节流包含的信息是否符合虚拟机的要求,避免有危害虚拟机的信息

2)验证过程
文件格式验证:验证字节流是否符合Class文件格式规范
元数据验证: 类的验证,例如:类继承接口,是否实现接口所有方法
字节码验证: 类中方法进行验证,例如:方法中类型转换
符号引用验证:例如:符号引用中的类、字段、方法的访问性是否能被当前类访问

总结:
验证过程从文件格式、类、方法、符号引用四个过程进行验证的,从外到内的验证过程

3 准备
1)目的
为类变量(被static修饰)设置初始值; 在方法区分配;

public static int value=123; 准备阶段类变量会初始为0

常量会在准备阶段就会赋予最终值,如下:

public static fnal int value=123; 准备阶段常量会初始为123

4 解析
1)介绍
将常量池内的符号引用替换为直接引用的过程

解析的时间点根据需要来触发

2)四种引用的解析过程
a 类或接口的解析
b 字段解析
c 类方法解析
d 接口方法解析

5 初始化
准备阶段已经对类变量设置初始值了,初始化阶段则根据实际值去初始化类变量和static静态块。

初始化阶段也是执行类< client >()方法的过程:
< client >(): 由类变量和静态语句块组成(类变量初始化顺序优先于static静态代码块)
有父类,先初始化父类的< client >(),在调用子类的< client >()
虚拟机会保证类的< client >()方法在多线程下正确的加锁和同步,只会有一个线程会执行此方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值