Java类的装载过程可以分为三个阶段:加载(Loading)、链接(Linking)和初始化(Initialization)。
加载(Loading)阶段: 首先,Java虚拟机会根据类的全限定名,通过类加载器(ClassLoader)定位并读取类的字节码文件,字节码文件通常存放在磁盘或者网络中。 然后,Java虚拟机会将字节码文件中的静态数据结构转化为运行时数据结构,并将类的相关信息存放在方法区(Method Area)中。这些信息包括类名、父类名、接口等。
链接(Linking)阶段: 链接阶段又可以分为三个步骤:验证(Verification)、准备(Preparation)和解析(Resolution)。
2.1 验证(Verification):Java虚拟机会对字节码进行验证,以确保字节码符合Java虚拟机规范。验证过程包括类型检查、字节码验证、符号引用验证等。
2.2 准备(Preparation):在准备阶段,Java虚拟机会为类的静态变量分配内存,并设置默认初始值。这些变量存放在方法区中。
2.3 解析(Resolution):解析阶段是将虚拟机符号引用转换为直接引用的过程。虚拟机符号引用指的是在字节码中使用的符号引用,比如类和方法的符号引用,而直接引用是指直接指向内存中的地址。
总结: Java类装载的执行过程包括加载、链接和初始化三个阶段。加载阶段读取类的字节码文件,并将信息存放在方法区中;链接阶段包括验证、准备和解析三个步骤,确保字节码符合规范并转换为直接引用;初始化阶段执行类的初始化代码,首次主动使用时触发,只执行一次。