如何访问Java中的内存位置?

时间:2010-04-29 08:20:55

标签: java

我们是否可以直接或间接访问Java中的内存位置?

如果我们尝试打印对象,它将打印哈希码。 hashcode是否间接表示内存位置?

对于不同内存位置的两个对象,但它们的哈希码仍然可以变化。

-Abhishek

4 个答案:

答案 0 :(得分:12)

  

我们可以访问吗?   直接或Java中的内存位置   间接?

没有

答案 1 :(得分:7)

不,哈希码通常与内存位置无关。对象的内存位置是对象的引用本身。

然而,挤出实际位置可能并非完全不可能。根据其javadoc,Java Object的哈希码通常是通过将对象的内部地址转换为整数来实现的,但Java编程语言不需要这种实现技术。并且有System#identityHashCode(Object)方法,它将返回给定对象的相同哈希码,就像默认方法hashCode()(即Object的hashCode())返回的那样。所以这样你就可以获得实际的内存位置。但是,如上所述,这是否有效依赖于实现。即使你知道位置,你肯定无法在内存中直接读/写,你会对这些信息做些什么?

答案 2 :(得分:2)

可能不适用于原始数据类型。 您可以在引用类型上获取用于对象存储的数据区域的地址,但是通过Java Native Interface,我们可以访问C ++或C,从中我们可以获取Memory位置。

但是,这有点毫无意义。由于垃圾收集,任何线程创建新对象时,任何Java对象都可以在内存中移动

答案 3 :(得分:2)

如果提供了某些API,您可以读取/写入内存地址。在Sun / Oracle JRE上sun.misc.Unsafe允许你这样做,尽管有意你必须通过箍来获取实例。