一、Java类的加载过程如下:
1、.java 代码源文件 经过 javac命令编译成 .class字节码文件
2、java命令运行 .class文件,触发类加载
- 加载:将字节码文件转换成二进制流加载到内存中,并生成一个代表该类的 java.lang.Class文件。(一个类对应一个java.lang.Class 对象)
- 连接:
- 验证:验证加载的class文件字节流是否符合当前虚拟机的要求。例如:文件格式验证、元数据验证、符号引用验证等。可以考虑使用 -XVerify:none关闭大部分的类验证措施,缩短JVM的类加载时间
- 准备:主要是对静态变量在方法区分配内存,并进行默认初始化
- 解析:将常量池中的符号引用改成直接引用
- 初始化:真正执行类中定义的Java代码,进行所有静态变量和静态代码块的赋值动作
二、触发Java类加载的时机:(一个类只会被加载一次)
1、new创建对象
2、子类加载触发父类加载
3、调用静态成员
4、通过反射动态加载