精华内容
下载资源
问答
  • 符号引用以一组符号来描述...个人理解,如果使用符号引用,虚拟机其实也不知道具体引用的类的内存地址,那么也就无法真正的调用到该类,所以要把符号引用转为直接引用,这样就能够真正定位到类在内存中的地址,如果符号

    符号引用以一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用时能够无歧义的定位到目标即可,使用符号引用时,被引用的目标不一定已经加载到内存中。

    直接引用可以是直接指向目标的指针,相对偏移量,一个能间接定位到目标的句柄,使用直接引用时,引用的目标必定已经存在于虚拟机的内存中了。

    为什么在解析阶段要符号引用转直接引用?

    个人理解,如果使用符号引用,虚拟机其实也不知道具体引用的类的内存地址,那么也就无法真正的调用到该类,所以要把符号引用转为直接引用,这样就能够真正定位到类在内存中的地址,如果符号引用转直接引用失败,就说明类还没有被加载到内存中,就会报错。

    展开全文
  • 而解析阶段即是虚拟机将常量池内的符号引用替换为直接引用的过程。 1.符号引用(Symbolic References):符号引用以一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用时能够无歧义的定位到目标...

    在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)一个能间接定位到目标的句柄
    直接引用是和虚拟机的布局相关的,同一个符号引用在不同的虚拟机实例上翻译出来的直接引用一般不会相同。如果有了直接引用,那引用的目标必定已经被加载入内存中了。
    展开全文
  • JVM的符号引用和直接引用

    千次阅读 2017-04-25 11:30:41
    在JVM中类加载过程中,在解析阶段,Java虚拟机会把类的二级制数据中的符号引用替换为直接引用。1.符号引用(Symbolic References): 符号引用以一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用...

    在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的符号引用和直接引用

    千次阅读 2017-06-09 17:30:12
    类加载过程的解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程(参考深入理解Java虚拟机第七章),那么,什么是符号引用和直接引用呢?符号引用(Symbolic References)符号引用以一组符号来描述所引用的...

    类加载过程的解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程(参考深入理解Java虚拟机第七章),那么,什么是符号引用和直接引用呢?

    符号引用(Symbolic References)

    符号引用以一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用时能无歧义的定位到目标即可。符号引用与虚拟机实现的内存布局无关,引用的目标并不一定已经加载到内存中。各种虚拟机实现的内存布局可以各不相同,但是它们能接受的符号引用必须都是一致的,因为符号引用的字面量形式明确定义在Java虚拟机规范的Class文件中。

    直接引用(Direct References)

    直接引用可以是直接指向目标的指针、相对偏移量或是一个能间接定位到目标的句柄。直接引用是和虚拟机实现的内存布局相关的,同一个符号引用在不同虚拟机实例上翻译出来的直接引用一般不会相同。如果有了直接引用,那引用的目标必定已经在内存中存在。

    展开全文
  • 符号引用和直接引用

    千次阅读 2013-06-22 21:43:00
    总结:JVM对于直接引用和符号引用的处理是有区别的,可以看到符号引用时,JVM将使用StringBuilder来完成字符串的 添加,而直接引用时则直接使用String来完成;直接引用永远比符号引用效率更快,但实际应用开发中不...
  • 在编译时,java类并不知道引用类的实际内存地址,因此只能使用符号引用来代替。比如org.simple.People类引用org.simple.Tool类,在编译时People类并不知道Tool类的实际内存地址,因此只能使用符号org.simple.Tool...
  • JAVA的符号引用和直接引用

    千次阅读 2018-08-14 22:12:49
    符号引用要转换成直接引用才有效,这也说明直接引用的效率要比符号引用高。那为什么要用符号引用呢?这是因为类加载之前,javac会将源代码编译成.class文件,这个时候javac是不知道被编译的类中所引用的...
  • 符号引用和直接引用,解析分派

    千次阅读 2018-04-27 11:53:25
    知乎-RednaxelaFX——JVM里的符号引用如何存储? 【深入理解JVM】:解析与分派 1. 符号引用 2. 直接引用 3. 解析 4. 分派 4.1 静态分派 4.2 动态分派 5. 总结 5.1 符号引用 5.2 直接引用 5.3 解析 5.4 分派...
  • JVM的符号引用和直接引用是什么

    千次阅读 2019-07-08 22:58:49
    还包括类的其他部分,比如方法,字段等),引入了其他的类,可是JVM并不知道引入的其他类在哪里,所以就用唯一符号来代替,等到类加载器去解析的时候,就把符号引用找到那个引用类的地址,这个地址也就是直接引用。...
  •    Java类从加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命...而在解析阶段会有一个步将常量池当中二进制数据当中的符号引用转化为直接引用的过程。 符号引用符号引用以一组符号来描...
  • 直接引用在JVM中,类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用卸载7个阶段。而解析阶段即是虚拟机将常量池内的符号引用替换为直接引用的过程。...
  • JVM符号引用直接引用

    千次阅读 2020-03-27 20:11:38
    符号引用符号引用是以一组符号来描述所引用的目标,符号中的字面量可以是任何形式的,只要可以无歧义的定位到目标即可。符号引用与虚拟机实现的内存布局是无关的。各个不同的虚拟机实现的内存布局可以是不一样的...
  • 在编译时,java类并不知道引用类的实际内存地址,因此只能使用符号引用来代替。比如org.simple.People类引用org.simple.Tool类,在编译时People类并不知道Tool类的实际内存地址,因此只能使用符号org.simple.Tool...
  • JVM的直接引用和符号引用

    万次阅读 2018-11-06 21:14:33
    JVM在装载class文件的时候,会有一步是将符号引用解析为直接引用的过程。 那么这里的直接引用到底是什么呢? 对于指向“类型”【Class对象】、类变量、类方法的直接引用可能是指向方法区的本地指针。 指向实例...
  • 走进java_符号引用直接引用

    万次阅读 多人点赞 2017-05-28 14:55:27
    Java类从加载到虚拟机内存中开始,到... 而在解析阶段会有一个步将常量池当中二进制数据当中的符号引用转化为直接引用的过程。 符号引用符号引用以一组符号来描述所引用的目标。符号引用可以是任何形式的字面量,
  • JVM - 直接引用和符号引用

    千次阅读 2018-08-09 10:24:37
    而解析阶段即是虚拟机将常量池内的符号引用替换为直接引用的过程。 1.符号引用(Symbolic References):符号引用以一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用时能够无歧义的定位到目标...
  • JVM中符号引用直接引用

    千次阅读 2015-10-08 15:47:08
    解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程。二者之间的关联如下 符号引用(Symbolic Reference):符号引用以一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用时能无歧义的定位...
  • 浅析 JVM 中的符号引用直接引用

    千次阅读 多人点赞 2018-09-11 18:10:30
    在 JVM 的学习过程中,一直会遇到符号引用和直接引用这两个概念。最近我也查阅了一些资料,有了一些初步的认识,记录在此与大家分享。文中的内容,主要参考自 JVM里的符号引用如何存储? 与 自己动手写Java虚拟机...
  • JVM - 符号引用转化为直接引用

    千次阅读 2020-02-04 00:02:44
    而解析阶段即是虚拟机将常量池内的符号引用替换为直接引用的过程。 在编译的时候一个每个java类都会被编译成一个class文件,但在编译的时候虚拟机并不知道所引用类的地址,所以就用符号引用来代替,而在解析阶段...
  • 基础储备----字面量, 符号引用直接引用

    千次阅读 多人点赞 2018-09-07 17:48:10
    学习JVM的时候, 总碰到字面量, 符号引用直接引用这几个词, 理解的迷迷糊糊的. 这里总结一下.
  • 加载->链接(验证+准备+解析)->初始化(使用前...直接引用虚拟机的布局相关的,同一个符号引用在不同的虚拟机实例上翻译出来的直接引用一般不会相同。 如果有了直接引用,那引用的目标必定已经被加载入内存中了 。
  • 符号引用

    千次阅读 2019-06-17 14:20:11
    在编译时,java类并不知道引用类的实际内存地址,因此只能使用符号引用来代替。比如org.simple.People类引用org.simple.Tool类,在编译时People类并不知道Tool类的实际内存地址,因此只能使用符号org.simple.Tool...
  • Java的字面量和符号引用

    千次阅读 2018-07-28 23:07:29
    最近看jvm时遇到了“字面量”符号引用”这两个概念,它们被存放在运行时常量池,看了一些博客以后对这两个概念有了初步认识。 字面量可以理解为实际值,int a = 8中的8String a = "hello"中的hello...
  • java字面量和符号引用

    千次阅读 2018-11-06 23:55:17
    1.字面量 ...符号引用就是某个变量,在编译的时候,无法确定其内存地址。 String str = "Hello World!" System.err.println(str); 第二行代码中的str在编译的时候就会编译为符号引用。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 335,513
精华内容 134,205
关键字:

符号引用和直接引用的区别