链接(Linking)
链接一个类或接口包括在必要时验证和准备该类或接口、其直接超类、直接超接口、及元素类型(如果是数组类)。解析类或者接口中的符号引用是链接的可选部分。
对各JVM链接过程实现具有灵活性,但必须保留下列属性:
1、在链接之前,类或者接口必须已经被完全加载;
2、在初始化之前,类或者接口必须已经被完全验证和准备;
3、链接过程中检测到的程序错误会抛出到程序中某个位置,在该位置上,程序将采取某些操作,这些操作可能会直接或间接地链接到类或者接口所涉及到的类或者接口。
在某些JVM实现中,可能采取在使用时才会解析类或接口中的符号引用,或采取在该类或者接口被验证时一次性解析全部符号引用。这意味着解析过程可能在类或者接口被初始化后还会进行。
无论采取哪种策略,在解析过程中检测到的错误必须在(直接或者间接)使用该类或者接口符号引用的程序中的某个点抛出。
注:在链接过程中涉及新的数据结构的分配,所以链接可能由于OutOfMemoryError而失败。
验证(Verification)
检验即确保Class文件二进制字节流符合JVM要求,不会危及JVM。包括:
1、文件格式验证:字节流验证;
2、元数据验证:基于方法区存储结构验证;
3、字节码验证:基于方法区存储结构验证;
4、符号引用验证:基于方法区存储结构验证。
如果任一校验未通过&#x