Class文件需要加载到jvm虚拟机中之后才能运行和使用。
jvm加载Class文件的步骤为:加载->连接(验证->准备->解析)->初始化->使用->卸载
加载
加载是类加载过程中的一个阶段,这个阶段会在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的入口。注意这里不一定非得要从Class文件获取,这个即可以从ZIP包中读取(比如从jar包和war包中读取),也可以在运行时计算生成(动态代理),也可以由其他文件生成(比如将JSP文件转换成对应的Class类)。
验证
这一阶段的主要目的是为了确保Class文件的字节流中包含的信息是否符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。
准备
正式为类变量(static变量)分配内存并设置类变量初始值的阶段,这些内存都将在方法区中进行分配。注意此时的设置初始值为默认值,具体赋值在初始化阶段完成。
解析
虚拟机常量池的符号引用替换成直接引用(地址引用)的过程。
初始化
初始化阶段是执行类构造器< clinit >()方法的过程。类构造器< clinit >()方法是由编译器自动收集类中的所有类变量赋值动作和静态语句块(static块)中的语句合并产生的。