概述
虚拟机把描述类的数据从Class文件中加载到内存,并对数据进行校验,转换解析和初始化,最终形成可被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制;
类型的加载,连接和初始化都是在程序运行时完成的,这种做法虽然能增加性能开销,但运行期动态加载和动态连接是Java的动态扩展的基础;
类加载机制
解析阶段可以在初始化阶段之后进行,这是为了支持Java的运行时绑定(动态绑定);需要注意的是,上述的七个阶段并不是第一步做完了,再做第二步,并不是这样的;这些阶段通常是互相交叉地混合式进行的,通常是在一个阶段执行的过程中调用,激活另外一个阶段;
初始化阶段,有且仅有5种情况下会触发,当然,加载,验证,准备需要在此之前开始;
1.遇到new,getstatic,putstatic或invokestatic这4条字节码指令的时候;
2.
3.
4.
5.
这5种场景中的行为称为对一个类进行主动引用;如果引用 类的方式不会触发初始化,称为被动引用;