我正在用Java编写一个支持数组的哈希表,其中键和值的类型是Object;没有其他保证。
代码最简单的方法是创建一个对象来保存它们:
public class Pair {
public Object key;
public Object value;
}
然后创建一个数组
public Pair[] storage = new Pair[8];
但是jvm如何在内存中对待它?也就是说,阵列实际上是:
修改的
由于对象稍后被实例化为新的Pair(),因此它们被随机放置在堆中。有没有什么好方法可以确保它们在堆中顺序?我是否需要使用sun.misc.unsafe做一些诡计以使其工作?
解释我的动机,如果我想尝试确保顺序项位于同一内存页面中,有没有办法在Java中执行此操作?
答案 0 :(得分:6)
数组将是堆上的一个对象,其中包含指向Pair对象的指针,这些对象也将位于堆上(但与数组本身分开)。
答案 1 :(得分:1)
不,存储阵列只包含指向堆上其他位置的实际Pair对象的指针。但是,请记住实例化8个Pair对象,并使数组的每个元素指向这些对象。在你编写的代码之后你需要有这样的东西:
for(int i=0;i<storage.length;i++)
storage[i] = new Pair() ;
只有这样才能创建Pair对象并由存储阵列正确引用。