Java 符号引用 与 直接引用

在类的加载过程中的解析阶段,Java虚拟机会把类的二进制数据中的符号引用 替换为 直接引用,如Worker类中一个方法:

public void gotoWork(){
     car.run(); //这段代码在Worker类中的二进制表示为符号引用
}

在Worker类的二进制数据中,包含了一个对Car类的run()方法的符号引用,它由run()方法的全名 和 相关描述符组成。在解析阶段,Java虚拟机会把这个符号引用替换为一个指针,该指针指向Car类的run()方法在方法区的内存位置,这个指针就是直接引用。

摘自孙卫琴《Java面向对象编程》

时间: 2024-11-05 13:31:03

Java 符号引用 与 直接引用的相关文章

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

在JVM中类加载过程中,在解析阶段,Java虚拟机会把类的二级制数据中的符号引用替换为直接引用. 1.符号引用(Symbolic References): 符号引用以一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用时能够无歧义的定位到目标即可.例如,在Class文件中它以CONSTANT_Class_info.CONSTANT_Fieldref_info.CONSTANT_Methodref_info等类型的常量出现.符号引用与虚拟机的内存布局无关,引用的目标并不一定加载到内存中

从Java到C++——指针与引用

C++即有指针又有引用,而且很多时候具有相似的功能,常常容易让人混淆,着实让人头痛.用两句通俗的话说明两者本质的含意:引用就是一个变量或对象的别名(引用的本质是一个对象):指针是一个段内存空间的地址(指向存储一个变量值的空间或一个对象的空间):如下图所示:     C++中的引用与指针 引用 引用是为变量或对象起的另外一个别名,定义形式:T& v;  T为类型,v为变量名.使用引用时,注意以下几点: 1.引用在创建的时候必须被初始化(指针可以在任何时候赋值) 2.一旦引用初始化后,就不能改变引用

java 方法参数-值调用,引用调用问题

(博客内容来自于core java卷一) 1. xx调用:程序设计语言中方法参数的传递方式: 引用调用(call by reference):表示方法接收的是调用者提供的变量地址. 值调用(call by value):表示方法接收的是调用者提供的值. 命名调用(call by name):已经成为历史. 2. Java使用值调用,而且只有值调用.也就是说方法得到的是参数值的一个拷贝,并不是参数值本身,所以,方法不能修改传递给它的的任何参数变量本身. 看下面代码: public class te

JVM中的符号引用和直接引用

在阅读<<深入理解JAVA虚拟机>>一书中,发现书中所写的类加载过程中的解析这个步骤,可以概括为符号引用转化为直接引用,那么什么是符号引用? 个人认为可以这样理解: 符号引用就是一个类中(当然不仅是类,还包括类的其他部分,比如方法,字段等),引入了其他的类,可是JVM并不知道引入的其他类在哪里,所以就用唯一符号来代替,等到类加载器去解析的时候,就把符号引用找到那个引用类的地址,这个地址也就是直接引用. 原文地址:https://www.cnblogs.com/huangtao192

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

在JVM中类加载过程中,在解析阶段,Java虚拟机会把类的二级制数据中的符号引用替换为直接引用. 1.符号引用(Symbolic References): 符号引用以一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用时能够无歧义的定位到目标即可.例如,在Class文件中它以CONSTANT_Class_info.CONSTANT_Fieldref_info.CONSTANT_Methodref_info等类型的常量出现.符号引用与虚拟机的内存布局无关,引用的目标并不一定加载到内存中

符号引用与直接引用

符号引用:在编译时,java类并不知道所引用的类的实际地址,因此只能使用符号引用来代替.比如org.simple.People类引用了org.simple.Language类,在编译时People类并不知道Language类的实际内存地址,因此只能使用符号org.simple.Language(假设是这个,当然实际中是由类似于CONSTANT_Class_info的常量来表示的)来表示Language类的地址. 直接引用:直接引用可以是直接指向目标的指针 原文地址:https://www.cnb

java对象的强引用,软引用,弱引用和虚引用

从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期.这四种级别由高到低依次为:强引用.软引用.弱引用和虚引用. 1.强引用 以前我们使用的大部分引用实际上都是强引用,这是使用最普遍的引用.如果一个对象具有强引用,那就类似于必不可少的生活用品,垃圾回收器绝不会回收它.当内存空 间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足问题.一般都是new出来的. Object o=new

Java之强引用、 软引用、 弱引用、虚引用

1.强引用   平时我们编程的时候例如:Object object=new Object():那object就是一个强引用了.如果一个对象具有强引用,那就类似于必不可少的生活用品,垃圾回收器绝不会回收它.当内存空 间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足问题. 2.软引用(SoftReference)   如果一个对象只具有软引用,那就类似于可有可物的生活用品.如果内存空间足够,垃圾回收器就不会回收它,如果

Java 强引用、 软引用、 弱引用、虚引用

 1.对象的强.软.弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从JDK 1.2版本开始,把对象的引用分为4种级别,从而使程序能更加灵活地控制对象的生命周期.这4种级别由高到低依次为:强引用.软引用.弱引用和虚引用.下图为对象应用类层次. ⑴强引用(StrongReference)   强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会回收它.当内

Java 强引用,软引用,弱引用

1.强引用 public void handleMessage(Message msg) { case FAIL: GoplayException mException = new GoplayException(); setVideoUrlFailReason(mException); mListener.onFailed(mException); break; } protected void setVideoUrlFailReason(GoplayException mResult) {