博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
符号引用和直接引用--java
阅读量:4284 次
发布时间:2019-05-27

本文共 709 字,大约阅读时间需要 2 分钟。

   Java类从加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括,加载 ,验证 , 准备 , 解析 , 初始化 , 卸载 ,总共七个阶段。其中验证 ,准备 , 解析 统称为连接

   而在解析阶段会有一个步将常量池当中二进制数据当中的符号引用转化为直接引用的过程。

符号引用 :符号引用以一组符号来描述所引用的目标。符号引用可以是任何形式的字面量,只要使用时能无歧义地定位到目标即可,符号引用和虚拟机的布局无关。个人理解为:在编译的时候一个每个java类都会被编译成一个class文件,但在编译的时候虚拟机并不知道所引用类的地址,多以就用符号引用来代替,而在这个解析阶段就是为了把这个符号引用转化成为真正的地址的阶段。

public class Test{

   public static void main() {

     String s=”adc”;

     System.out.println(“s=”+s);

   }

}

 

 

这个代码中在编译的时候对应的s会被解析成为符号引用,

 

public class Test{

   public static void main() {

     System.out.println(“s=”+”abc”);

   }

}

 

而这段代码执行的时候会直接解析成直接引用。

 

直接引用 :直接引用和虚拟机的布局是相关的,不同的虚拟机对于相同的符号引用所翻译出来的直接引用一般是不同的。如果有了直接引用,那么直接引用的目标一定被加载到了内存中。

直接引用可以是: 

1:直接指向目标的指针。(个人理解为:指向对象,类变量和类方法的指针)

2:相对偏移量。      (指向实例的变量,方法的指针)

3:一个间接定位到对象的句柄。

你可能感兴趣的文章
Java+Maven+selenium+testng+reportng自动化测试框架(简易搭建说明)
查看>>
WEB模糊查询注意的问题(排除%等通配符并支持不连续关键字查询)
查看>>
PostgreSQL中表的阶层数据取得方法
查看>>
如何用产品思维迭代项目管理流程?(创业有感)
查看>>
Linux ALSA 声卡驱动之一:ALSA架构简介
查看>>
Linux ALSA 声卡驱动之二:声卡的创建
查看>>
Linux ALSA 声卡驱动之三:PCM设备的创建
查看>>
Linux ALSA 声卡驱动之四:Control设备的创建
查看>>
Linux ALSA 声卡驱动之五:移动设备中的ALSA(ASoc)
查看>>
Linux ALSA 声卡驱动之六:ASoc架构中的Machine
查看>>
Linux ALSA 声卡驱动之七:ASoc中的Codec
查看>>
android电池系统
查看>>
android4.x 耳机插拔检测机制
查看>>
Android 4.x耳机插拔检测实现方法
查看>>
android修改开机动画和铃声
查看>>
android audio音量控制流程
查看>>
解密回声消除技术之一(理论篇)
查看>>
Speex编解码在Android上实现
查看>>
speex回音消除
查看>>
audio 声道路由策略分析
查看>>