类加载三个阶段:
- 加载:将字节码转化为二进制字节流加载到内存中,并创建Class对象
- 链接
验证:安全验证(文件格式验证、元数据验证、字节码验证、符号引用验证)
准备:给静态变量分配内存(堆中),并默认初始化为 0 null false 等(staic final 例外,为具体值)
解析:将常量池内的符号引用替换为直接引用 - 初始化:执行
<clinit>()
方法(按顺序收集合并静态变量赋值和静态代码块),<clinit>()
方法 有锁
类加载三个阶段:
<clinit>()
方法(按顺序收集合并静态变量赋值和静态代码块),<clinit>()
方法 有锁