JVM 系列 : 3. 类加载机制

断了今生、忘了曾经 提交于 2020-04-05 21:53:30

上一篇文章介绍了class文件结构,在class文件中存储的各类数据。在这篇文章主要介绍 JVM(Java Virtual Machine) 是如何将class文件加载到内存中的,简言之”类加载机制“

类加载机制概述

虚拟机将class文件中数据加载到内存,并对其进行验证、解析和初始化,最终形成虚拟机可以使用的Java类型的过程,称之为“类加载机制”,在这里主要将加载过程分为“加载”、“验证”、“准备”、“解析”、“初始化”五个阶段。

类加载的过程

1. 加载

将Class文件加载到方法区中。

2. 验证

  • 文件格式验证

验证字节流是否符合Class文件格式的规范,及能否被当前虚拟机处理。主要验证如下:

□ 是否以魔数开头(0xCAFEBABE)

□ 主版本号、次版本号是否在当前虚拟机处理范围内

□ 常量池中是否有不被支持的常量类型

。。。。。

  • 元数据验证

对字节码数据进行语义分析,主要验证如下:

□ 此类是否有父类

□ 此类是否继承了不允许被继承的类

□ 如果不是抽象类,是否实现了父类的或接口要求实现的所有方法

。。。。。

  • 字节码验证

验证类的方法体是否合法、符合逻辑。

  • 符号引用验证

对常量池中各类符号引用进行匹配性分析。 此过程发生在解析阶段中进行。

3. 准备

为类变量设置零值

4. 解析

将常量池中符号引用替换为直接引用。主要包括以下:

□ 类或接口解析

□ 字段解析

□ 类方法解析

□ 接口方法解析

5. 初始化

为类变量设置初始值

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!