java虚拟机——虚拟机类加载机制
类加载机制:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Jave类型。
类从被加载到虚拟机内存中开始,到卸载出内存为止,整个生命周期:
加载——连接(包括:验证、准备、解析)——初始化——使用——卸载
其它类加载过程都是按部就班的开始,但是解析阶段不一定:在某些情况下可以在初始化阶段之后开始,为了支持java语言的运行时绑定。
1、加载
加载阶段虚拟机需要完成3件事:通过一个类的全限定名来获取定义此类的二进制字节流;将这个字节流所代表的的静态存储结构转化为方法区的运行时数据结构;在内存中生成一个代表这个类的对象,作为方法区这个类的各种数据的访问入口。
2、验证
该阶段确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并不会危害虚拟机自身的安全。
验证阶段主要完成4个验证动作:
(1)文件格式验证
如,魔数是否正确,是否有不被支持的常量
该阶段基于二进制字节流验证。之后的阶段会进入方法区。
(2)元数据验证
对类的元数据信息进行语义校验。如是否继承了final修饰的类
(3)字节码验证
确定程序语义是合法的、符合逻辑的。对类的方法体进行校验分析。
(4)符号引用验证
可通过描述符找到对应的类、字段等。
3、准备
正式为类变量分配内存并设置类变量初始值
类变量:被static修饰的变量。不包括实例变量
初始值:数据类型的零值,而不是程序中初始化的值
4、解析
虚拟机将常量池中的符号引用替换为直接引用
5、初始化
执行类构造器方法的