什么';这是java对象头中hashcode的角色

什么';这是java对象头中hashcode的角色,java,jvm-hotspot,Java,Jvm Hotspot,当锁处于无锁状态时,对象头中有25位用于标识哈希代码。我想知道hashcode的有用性 这是一个实现细节,因此真正的定义在源代码中,例如,应该解释其中的一些细节 默认的hashCode对于32位的VM(不知道从哪里得到23)有25位,对于64位的VM有31位 我猜无锁状态是指有偏锁定,但它要么是一个,要么是另一个,而不是同时是两个,因为在标记中没有空间对两者都起作用 有用性是一样的(不管你的意思是什么)-只是因为比特数较少,所以预期的碰撞会更高 到目前为止你研究了什么?具体哪一部分不清楚?我想人

当锁处于无锁状态时,对象头中有25位用于标识哈希代码。我想知道hashcode的有用性

这是一个实现细节,因此真正的定义在源代码中,例如,应该解释其中的一些细节

默认的
hashCode
对于
32位的
VM(不知道从哪里得到
23
)有25位,对于
64位的
VM有
31位

我猜无锁状态是指有偏锁定,但它要么是一个,要么是另一个,而不是同时是两个,因为在标记中没有空间对两者都起作用


有用性是一样的(不管你的意思是什么)-只是因为比特数较少,所以预期的碰撞会更高

到目前为止你研究了什么?具体哪一部分不清楚?我想人们完全误解了这个问题。OP询问的是Java对象头,不是语言定义的一部分,而是热点架构的一部分,因此不是询问hashcode的一般用途,而是为什么在对象头中使用它。我同意Real怀疑论者的观点,因此添加了一个标签,使问题与热点架构相关,由于标记“java”本身仅用于一般java语言问题。
System.identityHashCode(…)
保证始终为同一对象返回相同的值,因此,一旦使用该标记,必须为该对象记住该值。人们通常认为,这个标识哈希代码是一个内存地址,但是HotSpot JVM有一个分代垃圾收集器,它可以移动堆内存中的对象。此外,本地分配缓冲区中内存地址的可预测性使得地址成为错误的哈希代码(就
HashMap
效率而言)。因此,有不同的算法可以生成它,但结果必须存储在对象头中。这太神奇了!我给了一个错误的任务。但是你修正了它并给出了正确的答案。我明白了。谢谢大家。是的,你们说得对。我已经更正了问题描述。谢谢。