Как JVM гарантирует, что System.identityHashCode () никогда не изменится?

Обычно реализация по умолчаниюObject.hashCode() является некоторой функцией выделенного адреса объекта в памяти (хотя это не обязательноJLS). Учитывая, что виртуальная машина шунтирует объекты в памяти, почему значение возвращаетсяSystem.identityHashCode() никогда не меняются в течение срока службы объекта?

Если это "один выстрел" расчет (объектhashCode вычисляется один раз и сохраняется в заголовке объекта или что-то еще), значит ли это, что два объекта могут иметь одинаковыйidentityHashCode (если они сначала будут расположены по тому же адресу в памяти)?

Ответы на вопрос(5)

независимо от реализации, несколько объектов могут иметь один и тот же identityHashCode.

Видетьbug 6321873 для краткого обсуждения формулировок в javadoc и программы для демонстрации не уникальности.

что значение обычно рассчитывается только при первом использовании, чтобы свести время, затрачиваемое на распределение объектов, к минимуму (иногда вплоть до дюжины циклов). Обычную Sun JVM можно скомпилировать так, чтобы хэш-код идентичности всегда был равен 1 для всех объектов.

Несколько объектов могут иметь одинаковый хэш-код. Такова природа хэш-кодов.

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

ка».

Исходный код структуры данных для слова-метки можно найтиmarkOop.hpp файл. В этом файле есть комментарий, описывающий расположение в памяти слова пометки:

hash:25 ------------>| age:4 biased_lock:1 lock:2 (normal object)

Здесь мы видим, что хэш-код идентичности для обычных объектов Java в 32-битной системе сохраняется в слове метки и имеет длину 25 битов.

тот же объект должен возвращать согласованный хэш-код, оно не должно изменяться со временем или зависеть от какой-либо переменной информации (например, алгоритм, засеянный случайным числом или значения изменяемых полей-членов хеш-функция должна иметь хорошее случайное распределение и под этим я подразумеваю, если вы рассматриваете хеш-код как сегменты, 2 объекта должны отображаться в разные сегменты (хеш-коды), насколько это возможно. Возможность того, что 2 объекта будут иметь одинаковый хеш-код, должна быть редкой, хотя онаможе случилось.

ВАШ ОТВЕТ НА ВОПРОС