什么';Java中的引用变量中有什么?

什么';Java中的引用变量中有什么?,java,variables,jvm,reference,Java,Variables,Jvm,Reference,我们知道对象引用变量包含表示访问对象的方式的位 它不保存对象本身,但保存指针或地址之类的内容 我读了第一本Java(第二版)的书,书中写到(第3章,第54页) 在Java中,我们并不真正知道什么是 在引用变量内部。是的 要知道,不管是什么,它都是 表示一个且仅一个对象。 JVM知道如何使用 获取对象的引用。- 我想问: 对象引用变量是否包含指针、地址或什么 JVM如何解释这一点 这取决于JVM。除了可以通过Java引用访问对象之外,Java引用不保证有任何语义。Sunacle的做法也可能与IB

我们知道对象引用变量包含表示访问对象的方式的位

它不保存对象本身,但保存指针或地址之类的内容

我读了第一本Java(第二版)的书,书中写到(第3章,第54页)

在Java中,我们并不真正知道什么是 在引用变量内部。是的 要知道,不管是什么,它都是 表示一个且仅一个对象。 JVM知道如何使用 获取对象的引用。-

我想问:

  • 对象引用变量是否包含指针、地址或什么
  • JVM如何解释这一点

    • 这取决于JVM。除了可以通过Java引用访问对象之外,Java引用不保证有任何语义。Sunacle的做法也可能与IBM有所不同


      实际上,它通常可能是某种类型的指针,尽管可能不直接指向对象,因为它可以被GC移动。

      它完全是特定于JVM的。它可能是地址、指针或更复杂的东西。您没有或需要比使用引用获取对象更困难的保证。

      完全由JVM来确定引用中的内容

      在最简单的情况下,它只是一个指针(即地址)。在更复杂的情况下,虚拟机可能会根据情况使用不同的表示法-例如,您可能想继续阅读本文,了解热点虚拟机在作为64位虚拟机运行时如何避免在某些(但不是所有)位置将引用大小加倍


      重要的是你既不知道也不关心。就程序员而言,它只是一组不透明的位——它的唯一目的是让您访问所讨论的对象(或标识空引用)。

      由JVM决定引用的具体实现方式


      话虽如此,出于性能原因,任何“合理”的实现都可能使用直接指针或某种形式的压缩指针。我相信这适用于所有当前的生产JVM。

      一个合理的问题是“如何在的JVM中实现引用”。@Samuel-这取决于如何定义“合法”。除非您希望修改JVM本身,否则这些信息没有实际用途。好奇是可以的,但这类问题总是让我觉得有人坚持C的思维方式