but*_*ken 68 java jvm heap-memory hashcode
通常,默认实现Object.hashCode()
是内存中对象的已分配地址的某个函数(尽管这不是JLS强制要求的).鉴于VM在内存中分流对象,为什么System.identityHashCode()
在对象的生命周期内返回的值永远不会改变?
如果它是"一次性"计算(对象的hashCode
计算一次并隐藏在对象标题或其他东西中),那么这是否意味着两个对象可能具有相同的identityHashCode
(如果它们碰巧首先在内存中的相同地址)?
Tom*_*ine 40
现代JVM将值保存在对象标头中.我认为该值通常仅在首次使用时计算,以便将对象分配所花费的时间保持在最小(有时低至十几个周期).可以编译公共Sun JVM,以便所有对象的标识哈希码始终为1.
多个对象可以具有相同的标识哈希码.这是哈希码的本质.