JAVA类加载

类加载各个阶段完成任务

  1. 加载(Loading):将类的class文件读入内存,并为之创建一个java.lang.Class对象。此过程由加载器完成

  2. 连接(Linking):将类的二进制数据合并到JRE中
    验证(verification):对文件安全进行校验
    准备(Preparation):对静态变量默认初始化,并分配空间
    解析(Resolution):符号引用转为直接引用

  3. 初始化(initialization): JVM负责对类进行初始化,主要指静态变量

一. 加载阶段
二. 验证阶段 文件格式验证(以魔数 oxcafebabe开头)、原数据验证、字节码验证和符号引用验证
- 考虑使用 -Xverify:none 关闭大部分类验证措施
三. 准备阶段:对静态变量进行默认初始化(如 0,null,false)
class m1{
public int n1 = 10;
public static int n2 = 20; // 静态变量,默认初始化为0
public static final int n3 = 30; // static final为常量,在准备阶段就定义为30
}
四. 解析阶段
将相对位置的符号应用替换为绝对位置的直接引用
五. 初始化(Initialization)
收集所用静态变量与静态代码块的对象,使用clinit(){}进行顺序收集合并
如果执行new B()则会多输出一个构造器,B.num也会加载B类但不会输出构造器
注:同步机制synchronized (getClassLoadingLock(name)) 保证在内存中中只会加载一个class对象

posted on 2022-05-25 22:27  lhwnb3  阅读(28)  评论(0)    收藏  举报

导航