Java虚拟机中,Jvm如何实现类加载过程?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1752个文字,预计阅读时间需要8分钟。
类的运行过程 + 以一个main方法为例: + 类加载的具体流程为: + 1. 加载:将class字节码文件通过类加载器加载到内存中 + 2. 验证:检查字节码文件是否符合JVM规范 + 3. 准备:为静态变量分配内存并设置默认初始值
类的运行过程以一个main方法举例:
1.加载:把class字节码文件通过类加载器加载到内存中
2.验证:校验字节码文件是否符合jvm规范
3.准备:给静态变量赋初始值
比如8种基本类型的初值,默认为0;引用类型的初值则为null;常量的初值即为代码中设置的值,final static tmp = 456, 那么该阶段tmp的初值就是456
4.解析:将符号引用转为直接引用
符号引用。即一个字符串,但是这个字符串给出了一些能够唯一性识别一个方法,一个变量,一个类的相关信息。
直接引用。可以理解为一个内存地址,或者一个偏移量。比如类方法,类变量的直接引用是指向方法区的指针;而实例方法,实例变量的直接引用则是从实例的头指针开始算起到这个实例变量位置的偏移量
举个例子来说,现在调用方法hello(),这个方法的地址是1234567,那么hello就是符号引用,1234567就是直接引用。
在解析阶段,虚拟机会把所有的类名,方法名,字段名这些符号引用替换为具体的内存地址或偏移量,也就是直接引用。
如果在类加载期间解析的则为“静态链接”,代码运行到相应代码行才解析的则为“动态链接”。
本文共计1752个文字,预计阅读时间需要8分钟。
类的运行过程 + 以一个main方法为例: + 类加载的具体流程为: + 1. 加载:将class字节码文件通过类加载器加载到内存中 + 2. 验证:检查字节码文件是否符合JVM规范 + 3. 准备:为静态变量分配内存并设置默认初始值
类的运行过程以一个main方法举例:
1.加载:把class字节码文件通过类加载器加载到内存中
2.验证:校验字节码文件是否符合jvm规范
3.准备:给静态变量赋初始值
比如8种基本类型的初值,默认为0;引用类型的初值则为null;常量的初值即为代码中设置的值,final static tmp = 456, 那么该阶段tmp的初值就是456
4.解析:将符号引用转为直接引用
符号引用。即一个字符串,但是这个字符串给出了一些能够唯一性识别一个方法,一个变量,一个类的相关信息。
直接引用。可以理解为一个内存地址,或者一个偏移量。比如类方法,类变量的直接引用是指向方法区的指针;而实例方法,实例变量的直接引用则是从实例的头指针开始算起到这个实例变量位置的偏移量
举个例子来说,现在调用方法hello(),这个方法的地址是1234567,那么hello就是符号引用,1234567就是直接引用。
在解析阶段,虚拟机会把所有的类名,方法名,字段名这些符号引用替换为具体的内存地址或偏移量,也就是直接引用。
如果在类加载期间解析的则为“静态链接”,代码运行到相应代码行才解析的则为“动态链接”。

