JAVA虚拟机类加载机制
2020第一更 简单易懂JAVA虚拟机类加载机制
类从被加载到虚拟内存中开始,到卸载内存为止,他的整个生命周期包括:加载–>链接–>初始化–>使用–>卸载
加载
- 获取二进制字节流
静态存储结构转化方法区的运行时数据结构
在JAVA堆生成一个类对象、作为方法区的访问入口
链接:包含验证,准备,解析
- 验证
验证Class的标识:魔术 Magic Number
验证Class的版本号
验证常量池
Class文件每部分(字段表,方法表)是否正确
元数据验证(父类验证,继承验证,final验证)
字节码验证(指令验证)
符号引用验证(通过符号引用是佛偶能找到字段,方法,类) - 准备
为类变量分配内存并且设置类变量的初始化阶段
只对static类变量进行内存分配
static int n = 2;
初始化值是0,而不是2,因为这时候还没有执行任何Java方法.(静态变量,静态块初始化)
static final int n = 2
对应到常量池,在准备阶段必须被赋值成2
类变量:一般称为静态变量
实例变量:当对象被实例化的时候,实例变量就跟着确定了,随着对象的销毁而销毁。 - 解析
对符号引用进行解析
直接引用:指向目标的指针或者偏移量
符号引用–》直接引用
主要涉及:类,接口,字段,方法(接口,类)等。
初始化
- 为标记为常量的字段赋值,以及执行clinit方法
- clinit:(静态变量,静态块初始化)
- init类的实例构造器初始化
来源:CSDN
作者:郑阿媛啊
链接:https://blog.csdn.net/azlnhaha/article/details/104054175