虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是JVM的类加载机制。
在java语言里,类型的加载,连接和初始化过程都是程序运行期间完成。java里天生可以动态扩展的语言特性就是依赖运行期间动态加载和动态连接这个特点来实现的。
类的生命周期:
加载(loading),验证(verification),准备(preparation),解析(Resolution),初始化(initialization),使用(using),卸载(unloading)。
其中验证,准备,解析统称为连接(linking).
1,加载
1)通过类的全限定名称来获取此类的二进制流。
2)将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。
3)在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问接口。
2,验证
1)文件格式验证
2)元数据验证
3)字节码验证
3,准备
正式为类变量(static 修饰的变量)分配内存,并设置类变量初始值(零值,final修饰除外)的阶段,这些变量所使用的内存都将在方法区中分配。
4,解析
虚拟机将常量池内的符号引用替换为直接引用的过程
5,初始化阶段是执行类构造器<clinit>()方法的过程