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正确引用。