Java объект и расположение памяти массива - PullRequest
1 голос
/ 10 августа 2010

Я пишу хеш-таблицу на основе массива в Java, где типом ключа и значения являются Object; другой гарантии нет.

Самый простой способ для меня по кодам - ​​создать объект для их хранения:

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

А затем создать массив

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

Но как jvm относится к этому в памяти? То есть будет ли массив на самом деле:

  • будет массивом указателей на объекты Pair (), находящиеся в другом месте, или
  • содержит фактические данные?

1020 * редактировать *

Поскольку объекты создаются позже как new Pair (), они случайным образом помещаются в кучу. Есть ли хороший способ убедиться, что они последовательно в куче? Должен ли я сделать какую-то хитрость с sun.misc.unsafe, чтобы сделать эту работу?

Объясняя свою мотивацию, если я хочу попробовать и убедиться, что последовательные элементы находятся на одной странице памяти, есть ли способ сделать это в Java?

Ответы [ 2 ]

6 голосов
/ 10 августа 2010

Массив будет объектом в куче, содержащим указатели на объекты Pair, которые также будут в куче (но отдельно от самого массива).

1 голос
/ 10 августа 2010

Нет, массив хранения будет содержать только указатели на фактические объекты Pair, существующие где-то еще в куче. Тем не менее, не забудьте создать экземпляр объекта 8 Pair и сделать так, чтобы каждый элемент массива указывал на эти объекты. Вам нужно что-то вроде этого после кода, который вы написали:

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

Только в этом случае объекты Pair будут созданы и правильно найдены массивом хранения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...