Java -- JVM的符号引用和直接引用

在JVM中类加载过程中,*在解析阶段,Java虚拟机会把类的二级制数据中的符号引用替换为直接引用。*

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)一个能间接定位到目标的句柄

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

java符号引用 直接引用_Java -- JVM的符号引用和直接引用相关推荐

  1. java字面量和符号引用_java -- JVM的符号引用和直接引用

    在JVM中类加载过程中,在解析阶段,Java虚拟机会把类的二级制数据中的符号引用替换为直接引用. 1.符号引用(Symbolic References): 符号引用以一组符号来描述所引用的目标,符号可 ...

  2. java对象什么时候回收_Java对象的生命周期与垃圾回收以及四种引用

    创建对象的方式用new语句创建对象. 使用反射,调用java.lang.Class或java.lang.reflect.Constructor的newInstance()实例方法. 调用对象的clon ...

  3. JVM的符号引用和直接引用

    在读<深入理解JVM虚拟机>一书的类加载机制章节中,在类加载过程中的解析中提到"符号引用转换为直接引用",对这块的概念不是很了解,遂记录此博客. 在JVM中类加载过程中 ...

  4. java中对象清空值_对象的引用和清除_Java语言程

    对象的引用和清除_Java语言程 4.3.3 对象的引用和清除 在创建了类的对象后,就可以使用对象.即对象使用的原则是"先创建后使用". 使用对象的方法是:通过运算符". ...

  5. java父类引用子类属性_Java多态性详解——父类引用子类对象

    面向对象编程有三个特征,即封装.继承和多态. 封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护了数据. 继承是为了重用父类代码,同时为实现多态性作准备.那么什么是多 ...

  6. java 父类获取子类对象_Java多态性详解 (父类引用子类对象)

    面向对象编程有三个特征,即封装.继承和多态. 封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护了数据. 继承是为了重用父类代码,同时为实现多态性作准备.那么什么是多 ...

  7. java中对象 引用的概念_java中的对象 方法 引用 等一些抽象的概念是什么意思呢?...

    2020-03-14 最近这一段时间有点忙,好久都没有更新博客了,之后我会一直坚持下去的,和大家一同进步的. 这段时间一直在学java,相信刚开始学习java的小白,刚开始接触那么些抽象的概念一定和我 ...

  8. java值传递和引用传递简单_Java里的值传递与“引用传递”——一些想法

    这两天在看Java的时候看到了方法中的值传递与引用传递,对于值传递我们都可以理解,非常的简单,但是对于引用传递,对于我们学过c++的人来说,那可不就来劲了吗,直接写一个函数来用"&& ...

  9. java 父类引用子类对象_java 父类引用指向子类对象

    1. 无论是泛型还是普通父类引用指向子类对象,父类引用可见范围都是父类自己的变量或函数 2. 说明见注释 代码如下:父类 package com.atguigu.spring.beans; publi ...

最新文章

  1. linux 修改系统时间和时区
  2. oschina android版源码中的颜色值
  3. ArcGIS Engine控件运行许可学习总结
  4. Codeforce 1255 Round #601 (Div. 2) C. League of Leesins (大模拟)
  5. java 三位数的水仙花数
  6. 设置调试PHP,debug php输出所有错误信息
  7. 树莓派C语言点灯,树莓派3 b GPIO 点亮小灯泡
  8. 【JavaScript】变量
  9. mqtt实例 php_php搭建MQtt协议服务
  10. leach算法的实现过程_LEACH分簇算法实现和能量控制算法实现(示例代码)
  11. c语言编程求阶梯数,c语言编程阶梯教程十二
  12. 从壹开始前后端分离【重要】║最全的部署方案 最丰富的错误分析
  13. Springboot微信点餐系统——01项目设计以及初步环境搭建
  14. uc/os--OSRdyTbl
  15. IntelliJ2021 设置热启动
  16. 浏览器f12, ::before ::after是什么意思?
  17. 【2014 年末岁首】
  18. java 蓝牙_通过Java代码连接到蓝牙设备
  19. 学习笔记---遥感影像辐射定标与大气校正
  20. 单纯形法表格法例题详解_Linear programing–simplex method(单纯形法) 解题步骤

热门文章

  1. Liunx下使用Nginx负载均衡
  2. 计算机专硕专业课单科分数线,计算机考研|这两所自划线,单科没过线也能复试?...
  3. mysql-bin磁盘满数据库重启不_liunx磁盘空间满了,导致mysql数据库无法启动
  4. ztree改变节点颜色
  5. vue jsx 使用 自定义组件
  6. 充电桩系统php源码,源码 充电桩程序设计 - 下载 - 搜珍网
  7. 安装tomcat和jdk 步骤
  8. cmd oracle 连接实例_C#连接Oracle数据库的实例方法
  9. yaml格式,给Java类绑定数据
  10. 搜狗输入法Android5.1,ESXI 服务器断电之后一直 LOADING MODULE IPMI_SI_DRV 的解决办法...