JVM 解析阶段 符号引用和直接引用的区别

在JVM中,类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载7个阶段。而解析阶段即是虚拟机将常量池内的符号引用替换为直接引用的过程。

1.符号引用(Symbolic References):符号引用以一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用时能够无歧义的定位到目标即可。例如,在Class文件中它以CONSTANT_Class_info、CONSTANT_Fieldref_info、CONSTANT_Methodref_info等类型的常量出现。符号引用与虚拟机的内存布局无关,引用的目标并不一定加载到内存中。在Java中,一个java类将会编译成一个class文件。在编译时,java类并不知道所引用的类的实际地址,因此只能使用符号引用来代替。比如org.simple.People类引用了org.simple.Language类,在编译时People类并不知道Language类的实际内存地址,因此只能使用符号org.simple.Language(假设是这个,当然实际中是由类似于CONSTANT_Class_info的常量来表示的)来表示Language类的地址。各种虚拟机实现的内存布局可能有所不同,但是它们能接受的符号引用都是一致的,因为符号引用的字面量形式明确定义在Java虚拟机规范的Class文件格式中。

2.直接引用:

直接引用可以是

(1)直接指向目标的指针(比如,指向“类型”【Class对象】、类变量、类方法的直接引用可能是指向方法区的指针)

(2)相对偏移量(比如,指向实例变量、实例方法的直接引用都是偏移量)

(3)一个能间接定位到目标的句柄

直接引用是和虚拟机的布局相关的,同一个符号引用在不同的虚拟机实例上翻译出来的直接引用一般不会相同。如果有了直接引用,那引用的目标必定已经被加载入内存中了。

(0)

相关推荐

  • 终于搞懂了Java 8 的内存结构,再也不纠结方法区和常量池了!!

    java8内存结构介绍 java8内存结构图 虚拟机内存与本地内存的区别 java运行时数据区域 直接内存 常见问题 java8内存结构介绍 java虚拟机在jdk8改变了许多,网络上各种解释都有,在 ...

  • JVM真香系列:轻松理解class文件到虚拟机(上)

    回复"000"获取大量电子书 JVM初探 class文件到JVM中,就相当于我们吃饭,食物吃进了肚子里,不同的营养成分被身体不同的器官吸收. 查找class文件并导入到JVM中 ( ...

  • Jvm基础,快进来复习复习吧~

    大家好,今天总结了一下老生常谈的 JVM,这也是面试必问的知识. 话不多说,整起来!! 1.JVM 是什么? 1.Java 虚拟机(Jvm)是可运行 Java 代码的假想计算机. 2.Jvm 充当着一 ...

  • JVM-类加载

    JVM 类加载 JVM整个流程图 一个java文件被编译为class文件后,剩下的操作都交给jvm来执行,其中第一步就是将class文件加载到jvm,而这一步就是由类加载器来完成的 类加载的流程又分为 ...

  • 类加载机制

    虚拟机类加载机制 1.概述 虚拟机把描述类的数据从Class文件加载到内存中,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制. 在Java中数 ...

  • 奇妙的单元格绝对引用与相对引用

    在编写公式时,引用单元格或者单元格区域是最平常不过的操作了.Excel将单元格引用分成绝对引用.相对引用和混合引用,如果行号列标前面有$号,则是绝对引用,否则是相对引用. 认识单元格引用 我们使用下图 ...

  • 死磕Spring之IoC篇 - BeanDefinition 的解析阶段(XML 文件)

    该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读 Spring 版本:5.1. ...

  • 直接引用与间接引用分别适用于哪种情况?

    当遇到文学.历史.社科等一些专业性的essay写作时,难免需要引用一些其他人的观点,比如在很多留学生essay中就经常出现.不过有些学生对引用的格式比较模糊,甚至会直接跳过引用格式,以至于被老师打回返 ...

  • 1.6 相对引用和绝对引用

    1.6 相对引用和绝对引用

  • Excel 2016︱名称中的相对引用和混合引用

    在名称中使用鼠标点选方式输入单元格引用时,默认使用带工作表名称的绝对引用方式.例如,单击[引用位置]对话框右侧的折叠按钮,然后单击 Sheet1 工作表中的 A1 单元格,相当于输入"=Sh ...

  • 【视频】Excel函数每日一讲(5):相对引用和绝对引用

    以上视频的所有教学内容,选自教材<玩转Office轻松过二级>(第3版) 书上包含所有方法.技巧.题目,可以自己看书自学. 字都认识,为啥要让别人念呢? 选自本书第9章前言 公式和函数,E ...

  • Excel 02 绝对引用和相对引用

    一,定义 在拖动自动填充柄的时候,默认的情况下,如果单元格的公式里有引用其他单元格的数据,那么,这个单元格引用的行和列编号会产生相应的变化.如果使用了绝对引用,即使拖动填充柄,这个引用也不会发生任何变 ...

  • 【Excel基础知识】相对引用、绝对引用和混合引用

    绝对引用.相对引用和混合引用可以说是三个概念,也可以说是一个概念,就是"$"这个符号的用法.对于这个概念,理解意思要比记住概念本身更重要. 重要提示:在学习下面的内容时,建议打开表 ...

  • 初学必读,搞不懂绝对引用、相对引用、混合引用的表亲!

    最近推送的几篇文章: 学好了Excel,520可以变得如此美丽又文艺! 千分号‰.万分号‱ 怎么输?掌握这个快捷键轻松输入 真香!没有下载券,照样下载百度文库资料,你肯定用得上 这么好用的填充技巧你都 ...