类加载过程

类加载过程

加载(Loading)

Java将字节码数据从不同的数据源(jar文件、class文件、网络数据源等)读取到JVM中,并映射JVM认可的数据结构(Class对象);如果输入数据不是ClassFile的结构,则会抛出ClassFormatError

链接(Linking)

这是核心步骤,简单来说就是把原始的类定义信息平滑地转化入JVM运行的过程中,包括验证、准备和解析这三个步骤。

验证(Verification)

这是虚拟机安全的重要保障,JVM需要核验字节信息是符合Java虚拟机规范的,否则就被认为是VerifyError,这样就防止了恶意信息或者不合规的信息危害JVM的运行,验证阶段有可能触发更多class的加载

准备(Preparation)

创建类或接口中的静态变量,并初始化静态变量的初始值。但这里的“初始化”和下面的显式初始化阶段是有区别的,侧重点在于分配所需要的内存空间,不会去执行更进一步的JVM指令

解析(Resolution)

这一步会将常量池中的符号引用(symbolic reference)替换为直接引用

初始化(Initialization)

这一步真正去执行类初始化的代码逻辑,包括静态字段赋值的动作,以及执行类定义中的静态初始化块内的逻辑,编译器在编译阶段就会把这部分逻辑整理好,父类型的初始化逻辑优先于当前类型的逻辑

你可能感兴趣的:(jvm,jvm,java,开发语言)