类加载机制的加载、连接与初始化
请详细说明JVM类加载机制中加载、连接(验证/准备/解析)和初始化三个阶段分别做了什么。
回答
专业代码师
1. 加载(Loading)
- 通过全限定类名获取二进制字节流(Class文件)。
- 将字节流转换为方法区的运行时数据结构。
- 在堆中生成Class对象,作为方法区数据的访问入口。
2. 连接(Linking)
- 验证:确保Class文件字节流符合规范(文件格式、字节码语义等)。
- 准备:为静态变量分配内存并设置零值(int=0,引用=null),final static直接赋初始值。
- 解析:将常量池中的符号引用替换为直接引用(指针/偏移量)。
3. 初始化(Initialization)
- 执行类构造器()方法,收集所有静态变量赋值和静态代码块。
- 类初始化时机:new/getstatic/putstatic/invokestatic/反射/子类初始化/主类。
- 注意:引用父类静态字段不触发子类初始化;定义数组引用不触发类初始化。