一、整加载过程:
1.1、Loading 装载
- 先找到 classw 文件 —> 字节流 —> 类加载器 ClassLoader
测试:
public static void main(String[] args) {System.out.println(new Student().getClass().getClassLoader());
System.out.println(new Student().getClass().getClassLoader().getParent());
System.out.println(new Student().getClass().getClassLoader().getParent().getParent());
System.out.println(new String().getClass().getClassLoader());
}
sun.misc.Launcher$AppClassLoader@18b4aac2
sun.misc.Launcher$ExtClassLoader@10f87f48
null
null
重点:双亲委派准则
- 字节流 —> 静态数据构造 —> 办法区(供所有 Java 虚拟机栈应用)
- 字节流 —> class 对象 —> 堆(供所有 Java 虚拟机栈应用)
1.2、Linking 筹备
- Verification 验证
验证数据的准确性。说白了就是看你文件对不对,例:文件格式、元数据、字节码、符号援用 - Preparation 筹备
为类的动态变量分配内存,并赋值为以后类型默认值; - Resolution 解析
将类的符号援用(存在常量池)变成间接援用;
这在 class 文件汇总只是示意改数据是什么类型,就如一种标识、一种符号,在这个过程中要将这些符号分配内存
1.3、Initiating 初始化
为类的动态变量真正的初始化值