jvm笔记(二)_类加载机制

 1、类加载时机

 类的整个生命周期包括了:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)七个阶段。其中验证、准备和解析三个部分统称为连接(Linking),这七个阶段的发生顺序如下图。

上图中,加载、验证、准备、初始化和卸载这五个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班地开始。而解析阶段不一定:它在某些情况下可以在初始化阶段之后再开始,这是为了支持Java语言的运行时绑定(也称为动态绑定或晚期绑定)。这里的按部就班地“开始”,而不是“进行”或“完成”,是因为这些阶段通常都是互相交叉地混合式进行的,通常再一个阶段 执行的过程中调用或激活另外一个阶段。

1.1、类的主动引用和被动引用。

虚拟机规范严格规定了只有四种情况(主动引用)必须对类进行“初始化”(而加载、验证、准备自然需要在此之前开始)。所有的java虚拟机实现必须在每个类或接口被java程序“首次主动引用”时才初始化他们。

主动引用(四种)

1)遇到new、getstatic、putstatic或invokestatic这4条字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。生成这4条指令的常见Java代码场景是:使用new关键字实例化对象的时候、

2、类加载过程

类加载的全过程:加载、验证、准备、解析和初始化这五个阶段。

 3、类加载器

猜你喜欢

转载自www.cnblogs.com/boomoom/p/9953928.html