上一篇文章介绍了class文件结构,在class文件中存储的各类数据。在这篇文章主要介绍 JVM(Java Virtual Machine) 是如何将class文件加载到内存中的,简言之”类加载机制“
类加载机制概述
虚拟机将class文件中数据加载到内存,并对其进行验证、解析和初始化,最终形成虚拟机可以使用的Java类型的过程,称之为“类加载机制”,在这里主要将加载过程分为“加载”、“验证”、“准备”、“解析”、“初始化”五个阶段。
类加载的过程
1. 加载
将Class文件加载到方法区中。
2. 验证
- 文件格式验证
验证字节流是否符合Class文件格式的规范,及能否被当前虚拟机处理。主要验证如下:
□ 是否以魔数开头(0xCAFEBABE)
□ 主版本号、次版本号是否在当前虚拟机处理范围内
□ 常量池中是否有不被支持的常量类型
。。。。。
- 元数据验证
对字节码数据进行语义分析,主要验证如下:
□ 此类是否有父类
□ 此类是否继承了不允许被继承的类
□ 如果不是抽象类,是否实现了父类的或接口要求实现的所有方法
。。。。。
- 字节码验证
验证类的方法体是否合法、符合逻辑。
- 符号引用验证
对常量池中各类符号引用进行匹配性分析。 此过程发生在解析阶段中进行。
3. 准备
为类变量设置零值
4. 解析
将常量池中符号引用替换为直接引用。主要包括以下:
□ 类或接口解析
□ 字段解析
□ 类方法解析
□ 接口方法解析
5. 初始化
为类变量设置初始值
来源:oschina
链接:https://my.oschina.net/HUC80800/blog/3216610