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

66

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

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

Error: User Rate Limit Exceeded Thilo
Error: User Rate Limit Exceeded Thilo
Error: User Rate Limit Exceeded Tom Hawtin - tackline
Error: User Rate Limit Exceeded Thilo
Error: User Rate Limit Exceeded Thilo

Ваш Ответ

5   ответов
38

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded butterchicken
16

Error: User Rate Limit Exceeded

Error: User Rate Limit ExceededError: User Rate Limit ExceededError: User Rate Limit Exceeded

Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededidentityHashCodeError: User Rate Limit ExceededObjectError: User Rate Limit Exceeded
Error: User Rate Limit ExceededidentityHashcodeError: User Rate Limit ExceededidentityHashCodeError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
-3

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded
0

Error: User Rate Limit Exceeded

  • the same object should return a consistent hashCode, it should not change with time or depend on any variable information (e.g. an algorithm seeded by a random number or values of mutable member fields
  • the hash function should have a good random distribution, and by that I mean if you consider the hashcode as buckets, 2 objects should map to different buckets (hashcodes) as far as possible. The possibility that 2 objects would have the same hashcode should be rare - although it can happen.
2

Error: User Rate Limit Exceeded

Error: User Rate Limit ExceededmarkOop.hppError: User Rate Limit Exceeded

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

Error: User Rate Limit Exceeded

Похожие вопросы