引言:
你需要运行你写的程序,首先需要编译为calss文件,保存了虚拟机可识别的二进制字节码,就是1,0啊。但是你需要把你的二进制信息放进虚拟机里面去,虚拟机在哪,他是正在运行的程序,所以要放进内存里,准确的说是放进虚拟机所管理的内存里面,所以我就来复习下虚拟机加载类文件的一些动作,面试要问啊~
类加载的七个阶段:
加载,验证,准备,解析,初始化,使用,卸载。(使用和卸载就不说了)
前面五个阶段的总结:
1.加载:分为三个阶段
1)通过类的全限定名加载二进制流。
2)把Class文件二进制流的静态存储结构在方法取中以运行数据结构存储起来。
3)在方法区生成并保存一个表示该类的Class对象,作为程序访问方法区中这个类的数据的外部接口。
注意:数组不需要加载,而是由jvm自己创建
2.验证:
1)文件格式验证(魔数,版本号等)。
2)元数据验证(验证是否符合java语义规范的元数据,是否有父类,是否继承了final这种不可被继承的类等)。
3)字节码验证(对方法体进行验证,如跳转指令不会跳转到方法体以外的字节指令上等)。
4)符号引用验证功能(如符号引用的类是否可以找到)。
3.准备:
1)类级变量分配内存初始值设置,8中基本类型为0或false,引用类型为null。
4.解析:
1)将符号引用转化为直接引用。
5.初始化:
1)根据类中代码真正的第一次根据程序猿的主观意识对一个类的类级变量和static语句块儿(都有static关键字)做赋值的初始化操作(如:类级变量的真正初始化--赋值)。
6.使用:略。
7.卸载:略。