2015-07-05 4 views
10

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

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

Вопрос

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

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

+6

Звучит так, как если бы это была конкретная реализация. Я также уверен, что это зависит от программного обеспечения, так как [порядок памяти] (https://en.m.wikipedia.org/wiki/Memory_ordering) может повлиять на такие вещи. Однако может быть неправильно на этой последней части. –

+1

Я уверен, что кеш процессора на 100% под контролем аппаратного обеспечения. Возможно, что, поскольку сборщик мусора работает, он объединяет ваши 1000 объектов в общую область памяти. Однако ничто из того, что я прочитал, не указывает на то, что любой GC делает это. В любом случае аппаратные кэши обычно заполнены важными данными, любой «предварительный кэш» ограничен одной строкой кэша, обычно около 32-16 байтов. – markspace

+0

Куча разделена на молодое и старое пространство.У молодого пространства есть недавно выделенные объекты. Когда эти объекты стареют, они перемещаются в старую область. «Сохранить» - это место недавно выделенных объектов, которые быстро перемещаются и не собираются собирать мусор. –

ответ

7

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

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

Чуть глубже в уплотнении ..

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

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

Окончательный ответ

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

Если вы ДЕЙСТВИТЕЛЬНО заинтересованы в таких деталях (возможно, есть какая-то странная ошибка, с которой вы сталкиваетесь), как я уже упоминал ранее, это конкретная реализация, и вам нужно будет указать, какая реализация вы ссылаясь на.

Хотя, как я уже говорил, это Java; перестаньте беспокоиться о вещах, о которых вам не нужно беспокоиться. Я не могу это подчеркнуть.

+2

Согласен. Основной смысл Java заключается в том, что вам (большую часть времени) не нужно заботиться о таких деталях низкого уровня; JIT обучается опыту тысяч проектов и людей, чтобы сделать код Java эффективным. Время и усилия инвестировали в одно место, чтобы освободить мозг от миллионов разработчиков. –

+0

Я [ответил здесь] (http://stackoverflow.com/questions/22689712/prefetch-instruction-in-jvm-java/22692112#22692112) о поддержке предварительной выборки в JVM HotSpot. Однако недавно эти свойства были полностью удалены из репозитория разработки HotSpot с обоснованием, что для них нет практического использования. – apangin

+0

@apangin Делает смысл. У вас есть ссылка на источник этой информации? Или это не задокументировано –

 Смежные вопросы

  • Нет связанных вопросов^_^