类加载机制
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型.
加载(Loading)
- 通过一个类的全限定名来获取定义此类的二进制字节流
- 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构
- 在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口
验证(Verification)
- 文件格式验证
- 元数据验证
- 字节码验证
- 符号引用验证
准备(Preparation)
- 正式为类变量分配内存并设置类变量初始值的阶段,这些变量所使用的内存都将在方法区中进行分配。进行内存分配的仅包括类变量(被static修饰的变量),而不包括实例变量。
解析(Resolution)
-
常量池内的符号引用替换成直接引用
-
类或接口的解析
-
字段解析
-
类方法解析
-
接口方法解析
初始化(Initialization)
使用(Using)
卸载(Unloading)