类加载、链接、初始化——链接,初始化

链接(Linking)

链接一个类或接口包括在必要时验证和准备该类或接口、其直接超类、直接超接口、及元素类型(如果是数组类)。解析类或者接口中的符号引用是链接的可选部分。

对各JVM链接过程实现具有灵活性,但必须保留下列属性:

1、在链接之前,类或者接口必须已经被完全加载;
2、在初始化之前,类或者接口必须已经被完全验证和准备;
3、链接过程中检测到的程序错误会抛出到程序中某个位置,在该位置上,程序将采取某些操作,这些操作可能会直接或间接地链接到类或者接口所涉及到的类或者接口。

在某些JVM实现中,可能采取在使用时才会解析类或接口中的符号引用,或采取在该类或者接口被验证时一次性解析全部符号引用。这意味着解析过程可能在类或者接口被初始化后还会进行。

无论采取哪种策略,在解析过程中检测到的错误必须在(直接或者间接)使用该类或者接口符号引用的程序中的某个点抛出。

注:在链接过程中涉及新的数据结构的分配,所以链接可能由于OutOfMemoryError而失败。

验证(Verification)

检验即确保Class文件二进制字节流符合JVM要求,不会危及JVM。包括:
1、文件格式验证:字节流验证;
2、元数据验证:基于方法区存储结构验证;
3、字节码验证:基于方法区存储结构验证;
4、符号引用验证:基于方法区存储结构验证。
如果任一校验未通过,均会报VerifyError。

注:校验过程可能会触发其他类或者接口的加载,但不会引发其校验及解析。

如果JVM在尝试校验某个类或者接口的过程中,报LinkageError,那么后续的校验尝试均会报相同错误。

准备(Preparation)

1、准备阶段做哪些事?

准备阶段包含创建类或接口的static字段并给这些字段赋默认值。注意,这里是赋默认值,真正显式赋初始值是在初始化阶段由显式初始化器进行赋值。

2、准备阶段发生的时段?

准备阶段可能发生在类或者接口创建之后的任意时间,但是必须发生在初始化阶段之前。

解析(Resolution)

以下JVM指令:

anewarray, checkcast, getfield, getstatic, instanceof, invokedynamic, invokeinterface, 
invokespecial, invokestatic, invokevirtual, ldc, ldc_w, multianewarray, new, putfield, 
and putstatic

均涉及对运行时常量池内容的符号引用,这些指令的执行均需要对符号引用进行解析。

1、解析的主要工作?

解析是从运行时常量池中的符号引用动态确定具体值的过程。也就是说,解析就是将符号引用转换成直接引用。

对一次invokedynamic指令发生的符号引用的解析并不意味着相同的符号引用对其他invokedynamic已解析。对上述的所有non-invokedynamic指令发生的符号引用的解析意味着相同的符号引用对其他non-invokedynamic指令是已解析的。

2、解析的符号引用类型?

1)类或接口解析
2)字段解析
3)方法解析
4)接口方法解析
5)方法类型和方法句柄解析
6)Call Site Specifier解析

初始化(Initialization)

初始化就是执行类或者接口的初始化方法。

当且仅当碰到如下条件时即刻触发类或者接口初始化:
1)执行如下JVM指令时
§new,§getstatic,§putstatic,§invokestatic,指令通过字段引用或者方法引用直接或者间接引用一个类或者接口,在这些指令执行时,如果对应的类或者接口没有初始化则被初始化。
2)首次调用java.lang.invoke.MethodHandle的实例对应的解析结果是 REF_getStatic、REF_putStatic、REF_invokeStatic方法句柄,并且这个方法所在类没有初始化,则先初始化。
3)在类库(例如在类Class或包java.lang.reflect)中,调用某些反射方法来生成实例的时候。
4)类在初始化时,若存在父类,并且父类没有被初始化过,则先触发父类初始化。
5)类在初始化时,如直接或者间接继承了某个声明了一个non-abstract、non-static的接口,那么先初始化该接口。
6)被设计成JVM启动时的初始化类

初始化阶段是执行类构造器<cinit>方法的过程,<cinit>方法是由编译器自动收集类中的类变量赋值语句及静态块中的赋值语句合并而成。JVM能够保证在执行类的<cinit>方法之前,其父类的<cinit>方法已经执行完毕。

发布了95 篇原创文章 · 获赞 5 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43878293/article/details/104290804