【JVM】符号引用 和 直接引用

embedded/2024/9/22 20:02:20/

符号引用 vs. 直接引用

在计算机科学中,特别是在编译原理和虚拟机技术中,涉及到两个概念:符号引用(Symbolic Reference)和直接引用(Direct Reference)。

符号引用(Symbolic Reference)

符号引用就像是地图上的路标,它告诉你目的地的名字,但没有具体的路线。在编程语言中,符号引用就是一种指代某个对象、方法或字段的名称和描述符。例如,在Java字节码中,当你编写了new String或调用一个方法时,编译器会在类文件的常量池中存储这些名字和描述符,而不是直接存储它们的具体位置或内存地址。

直接引用(Direct Reference)

直接引用就像是地图上的具体坐标,它直接指向一个确切的位置。在程序运行时,虚拟机需要知道每个对象、方法或字段的具体内存地址或位置,这就是直接引用。直接引用是虚拟机可以直接访问的对象,它包含了具体的内存地址或其他形式的直接定位信息。

解析阶段(Resolution Phase)

解析阶段就是在程序执行之前或执行期间,将这些符号引用转换成可以直接访问的直接引用的过程。

举例说明

想象你在做一个菜谱上的菜。菜谱上可能会说“取一勺盐”,但是你的厨房里有好几种盐(粗盐、细盐、海盐等),你不可能直接拿起“一勺盐”。你需要先确定具体是哪种盐,然后再去拿它。这就类似于从符号引用到直接引用的过程。

更具体的例子

假设你在Java中写了一个方法调用:

public class Example {public static void main(String[] args) {MyClass myClass = new MyClass();myClass.myMethod();}
}

在编译阶段,javac编译器会生成一个.class文件,里面会有类似如下的字节码指令:

 new #2                  // new MyClassdupinvokespecial #3       // Method "<init>":()Vastore_1aload_1invokestatic #4       // Method MyClass.myMethod:()Vreturn

这里的#2#3#4都是符号引用,它们在常量池中对应了MyClass类的构造方法和myMethod方法的描述符。

在类加载阶段(Class Loading Phase),当虚拟机准备执行这个方法时,它需要知道MyClass类和myMethod方法在内存中的确切位置。这时候就进入了解析阶段,虚拟机会将这些符号引用转换成直接引用,也就是找到MyClass类的实例和myMethod方法的实际内存地址。

总结

简单来说,解析阶段就是将类文件中的符号引用(比如方法名、字段名等)转换成可以直接访问的内存地址或其他形式的直接引用的过程。这个过程确保了虚拟机在执行字节码时能够准确地找到需要调用的方法或访问的字段。


http://www.ppmy.cn/embedded/115210.html

相关文章

AWS 将 OpenSearch 纳入 Linux 基金会旗下

AWS 今天宣布&#xff0c;随着OpenSearch 基金会的成立&#xff0c;它将把OpenSearch&#xff08;流行的 Elasticsearch 搜索和分析引擎的开源分叉&#xff09;移交给 Linux 基金会。在 Elastic 将其 Elasticsearch 和 Kibana 项目的许可证更改为自己的专有许可证 Elastic Lice…

js冒泡排序

冒泡排序是一种简单直观的排序算法。 冒泡排序的基本思想是通过重复地比较相邻的元素并交换它们&#xff08;如果它们的顺序错误&#xff09;&#xff0c;使得较大的元素逐渐移动到数列的末端&#xff0c;就像水中的气泡一样逐渐上浮到水面&#xff0c;直到整个数列变得有序。…

chapter14 数据结构与集合源码 知识点总结Note

文章目录 研究对象一&#xff1a;数据间逻辑关系研究对象二&#xff1a;数据的存储结构&#xff08;或物理结构&#xff09;研究对象三&#xff1a;运算结构 相关的算法操作一维数组链表栈队列树与二叉树List接口链表 LinkedListMap接口LinkedHashMapSet接口HashMap相关 研究对…

saltstack配置管理

一、saltstack的SSH工作模式 一、salt-ssh介绍 salt-ssh 是 0.17.0 新引入的一个功能&#xff0c;不需要minion对客户端进行管理&#xff0c;也不需要master。salt-ssh 支持salt大部分的功能&#xff1a;如 grains、modules、state 等salt-ssh 没有使用ZeroMQ的通信架构&#…

引入第三方字体图标icon

引入第三方字体图标icon 1.登录阿里巴巴icon库 2.点开ui提供的字体图标并下载 3.解压download 将font_4008950_i6fkbudh8ld文件放置项目中例如&#xff1a;放在assets文件夹下 4.然后再main.js中引入 import ‘/assets/font_4008950_i6fkbudh8ld/iconfont.css’; 5.项目中应…

刘诗诗一身白裙惊艳亮相奥妙北京活动,生图状态再次美出圈

9月21日&#xff0c;刘诗诗作为奥妙大中华区品牌代言人&#xff0c;惊艳亮相北京&#xff0c;在此次活动中&#xff0c;刘诗诗一如既往以绝佳好状态现身&#xff0c;一身白裙温柔从容&#xff0c;优雅美丽&#xff0c;一颦一笑都给人一种干净、纯净的美&#xff0c;在人群中非常…

迈入IT世界:技术趋势、职业选择与未来展望

迈入IT世界&#xff1a;技术趋势、职业选择与未来展望 1. 引言 随着科技的飞速发展&#xff0c;信息技术&#xff08;IT&#xff09;已经成为当今社会的中坚力量。无论是智能设备、互联网服务&#xff0c;还是数据分析与人工智能&#xff0c;IT技术驱动着各行各业的创新与进步…

轻量级RSS阅读器Fusion

什么是 Fusion &#xff1f; Fusion 是一款轻量级、自托管的 RSS 聚合器和阅读器。 软件主要特点&#xff1a; 自动分组、书签、搜索、嗅探信息导入/导出 OPML 文件支持 RSS、Atom、JSON 类型的 feed响应式、明/暗模式、PWA轻量级&#xff0c;自托管友好 使用 Golang 和 SQLit…