Java对象和数组内存位置

时间:2010-08-09 21:35:13

标签: java arrays memory hashtable paging

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

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

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

然后创建一个数组

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

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

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

修改

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

解释我的动机,如果我想尝试确保顺序项位于同一内存页面中,有没有办法在Java中执行此操作?

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:1)

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

for(int i=0;i<storage.length;i++)
    storage[i] = new Pair() ;

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