gpt4 book ai didi

java - 堆栈内存中的引用存储

转载 作者:行者123 更新时间:2023-11-30 08:15:06 25 4
gpt4 key购买 nike

引用本身如何存储在堆栈内存中。例如假设,

A a = new A();

这个a也应该存储在内存中,并且应该有一个内存地址,对吗?

如果我解释得更多,如果我们打印System.out.println(a),它将打印“对象A”的内存地址。但是我如何打印引用a的内存地址?

更正:如果我们打印System.out.println(a),它将打印“对象A”的哈希码,而不是对象A的内存地址

最佳答案

But how can i print the memory address of reference a?

很简单,你不能。 JVM 规范没有以任何方式定义堆栈的底层属性,并且严格按照规范,甚至不能保证它具有内存地址。实际上,在当前的实现中,当然是这样,但规范未定义这一点,因此 Java 没有用于检查堆栈内存布局的接口(interface)。

此外,应该注意的是,实际上,堆栈变量根本不保证具有内存地址。它们完全驻留在寄存器中并且从不刷新到内存中的情况并不罕见。

但是,还应该提到的是,与您所说的不同,System.out.println(a)不会打印由一个。它打印的内容也没有被规范定义,但 Oracle 的实现打印的是 a 的身份哈希码,而不是它的地址。 a 的地址甚至不能保证在其生命周期内保持不变,因为 GC 可能会移动它。

关于java - 堆栈内存中的引用存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29774474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com