Являются ли объекты запрограммированными из массива ссылок в Java?

Представьте, что у нас есть 1000 объектов одного и того же типа, рассеянных по памяти (они были созданы в разное время, и между ними были созданы другие объекты).

У нас есть массив, который содержит ссылки на каждый из 1000 объектов.

Вопрос

Если мы последовательно перебираем массив, что будет предварительно загружено в кеш процессора? Только ссылки, которые хранятся в массиве или будут ли эти ссылки разыменованы, а также объекты, загруженные в кеш?

Использует ли Java (JVM) какую-либо предварительную выборку программного обеспечения? Если нет, существуют ли библиотеки, которые обеспечивают предварительную выборку программного обеспечения?

Ответ 1

После некоторых исследований наиболее распространенная реализация JVM (HotSpot), используемая для поддерживает предварительную выборку. Но этот был удален, поскольку для них нет практического использования. Спасибо @apangin за ссылку на отчет об ошибке.

Как упоминалось в @markspace, объекты переустанавливаются для облегчения доступа во время коллекций - это называется "уплотнением" и присутствует в GC по умолчанию, используемом HotSpot. Вам не нужно беспокоиться о таких базовых деталях, как VM обрабатывает это для вас.

Немного глубже в уплотнение..

Вероятно, вы слышали о "Stop-The-World" - это происходит, когда граф объекта находится в противоречивом состоянии. Объекты перемещаются, поэтому поток может обращаться к объекту, который больше не существует. Существуют некоторые реализации GC, которые считаются "безрезультатными", например