类加载---链接

链接,是指将创建成的类合并至java虚拟机中,使之能执行的过程。它可以分为验证、准备及解析三个阶段。

1、验证:
目的在于确保被加载的类能够满足java虚拟机的约束条件。通常java编译器生成的类文件必然满足java虚拟机的约束条件

2、准备:
准备阶段的目的,则是为被加载类的静态字段分配内存。java代码中对静态字段的具体初始化,则会在稍后的初始化阶段中进行。过了这个阶段结构就基本完整了。

除了分配内存外,部分java虚拟机还会在此阶段构造其他跟类层次相关的数据结构。比如说用来实现虚方法的动态绑定的方法表。—-在class文件被加载至java虚拟机之前,这个类无法知道其他类及其方法、字段所对应的具体地址,甚至不知道自己方法、字段的地址。因此,每当需要引用这些成员时,java编译器会生成一个符号引用。在运行阶段,这个符号引用一般都能够无歧义定位到具体目标上。比如,对于一个方法调用,编译器会生成一个包含目标方法所在类的名字、目标方法的名字、接收参数类型以及返回值类型的符号引用,来指代所要调用的方法。

3、解析:
解析的目的是将这些符号引用解析成为实际引用。如果符号引用指向一个未被加载的类,或者未被加载的类的字段或方法,那么解析将触发这个类的加载(但未必触发这个类的链接已经初始化)。
注意java虚拟机规范中并没有要求在链接过程中完成解析。它仅规定了:如果某些字节码使用了符号引用,那么在执行这些字节码之前,需要完成对这些符号引用的解析。

猜你喜欢

转载自blog.csdn.net/u011649691/article/details/81540320