Java 内存中是否有用于存储引用地址的特定位置?

Java 内存中是否有用于存储引用地址的特定位置?,java,Java,根据我的粗略理解,基元类型变量直接存储值,而引用存储对象的位置。当我们想要访问一些对象时,我们只需要找到引用并获得存储在引用中的对象的地址。但是对象具有存储其地址的引用,谁存储引用地址?或者有一些特殊的方法来访问参考 'INTA;'变量“a”的内容被解释为整数 “对象a;”变量“a”的内容被解释为对象的地址 也许这将有助于进一步: 编辑: 嗯。。。也许您的问题是:“程序如何知道变量‘a’(引用对象的)位于何处?引用对象的变量的引用在何处?” 这是一个很好的问题。我不知道我要说的是否完全正确,但我

根据我的粗略理解,基元类型变量直接存储值,而引用存储对象的位置。当我们想要访问一些对象时,我们只需要找到引用并获得存储在引用中的对象的地址。但是对象具有存储其地址的引用,谁存储引用地址?或者有一些特殊的方法来访问参考

'INTA;'变量“a”的内容被解释为整数

“对象a;”变量“a”的内容被解释为对象的地址

也许这将有助于进一步:

编辑:

嗯。。。也许您的问题是:“程序如何知道变量‘a’(引用对象的)位于何处?引用对象的变量的引用在何处?”

这是一个很好的问题。我不知道我要说的是否完全正确,但我们走吧

程序必须自己在堆栈中分配内存。因此,在编译时,它已经定义了它将使用的地址。例如:

INTA; a=5

让我们将选择放置“a”的地址表示为“$AAA”(这只是一个使事情更简单的表示)。这将以如下方式进行编译:

在地址$AAA中输入5

看到了吗?编译后的代码已经知道“a”的位置:地址$AAA。无论何时在代码中使用或设置变量A,在编译代码中实际编写的是A的确切地址,在编译时选择

嗯。现在您可能会问编译器如何知道哪些地址是免费使用的

所以我读了这个问题的答案:

据我所知,一个“程序”(使事情变得更简单)从操作系统接收一系列内存,并被认为是完整的内存。因此,与其他程序没有冲突,操作系统需要将这些“虚拟地址”映射到真实地址。因此,编译器可以使用它想要的任何地址,而不必关心它是否空闲,因为操作系统将为程序提供“完全空闲内存”


我希望我没有犯大错误,这是你真正的问题。

我不确定你所说的“定位参考”是什么意思。如果您在某个地方没有对该对象的引用(甚至在某些深层对象层次结构中),那么您将找不到它,并且如果没有人对该对象进行引用,该对象将被垃圾收集

您可以将此引用放在方法中(就像您可以将
int
short
等类型存储在方法中),在这种情况下,它存储在
堆栈中(它是应用程序可用内存的一部分,存储方法的局部变量)

或者您可以将此引用存储在其他对象中,在这种情况下,此引用存储在
堆中
(也是应用程序可用内存的一部分,使用
新建
创建的对象存储在那里)

编辑:


如果您想知道这个对象是如何使用引用定位的,那么在Java中,这些实现细节对开发人员来说是隐藏的,所以您不关心这是如何发生的。在内部,对对象的引用可能包含该对象在计算机内存中的地址(您不知道的地址)。如果你写的是C++程序,那么你就能看到你创建的对象的内存地址。< /P>这是变量的值。但是我的程序可以通过什么方式来识别堆中的引用?@ DeSyLee:为什么需要?因为在我的想象中,如果程序找不到引用的地址,它找不到对象的地址,也无法访问对象。我不知道我的理解是否正确。若你们在一个正在运行的方法中有这个引用,那个么它被存储在名为堆栈的内存区域中,这样程序就可以在那个里找到它。如果在运行方法中没有对某个对象的引用,您可能仍然有对某个对象的引用,该对象包含对另一个对象的引用,该对象包含对所需对象的引用,因此您的程序仍然可以通过其他对象和引用访问该引用和该对象。@deathlee:编辑后,这是你的问题吗?