Java对象和数组内存位置

我正在用Java编写一个支持数组的哈希表,其中键和值的类型是Object; 没有其他保证。

代码方面对我来说最简单的方法是创建一个对象来保存它们:

public class Pair { public Object key; public Object value; } 

然后创建一个数组

public Pair[] storage = new Pair[8];

但是jvm如何在内存中对待它? 也就是说,arrays实际上是:

  • 是一个指向其他地方的Pair()对象的指针数组,或者
  • 包含实际数据?

编辑

由于对象稍后被实例化为新的Pair(),因此它们被随机放置在堆中。 有没有什么好方法可以确保它们在堆中顺序? 我是否需要使用sun.misc.unsafe做一些诡计以使其工作?

解释我的动机,如果我想尝试确保顺序项在同一个内存页中,有没有办法在Java中做到这一点?

该数组将是堆上的一个对象,其中包含指向Pair对象的指针,这些对象也将位于堆上(但与数组本身分开)。

不,存储arrays只包含指向堆上其他位置的实际Pair对象的指针。 但是,请记住实例化8个Pair对象,并使数组的每个元素指向这些对象。 在你编写的代码之后你需要有这样的东西:

 for(int i=0;i 

只有这样才能创建Pair对象并由存储arrays正确引用。