gpt4 book ai didi

java - System.identityHashCode() 对象被 GC 后是否可以返回相同的 hashCode

转载 作者:行者123 更新时间:2023-12-02 23:53:19 24 4
gpt4 key购买 nike

假设 System.identityHashCode(object1)==123object1 已被垃圾回收。新创建的 object2 是否可能具有与 GC 之前的 object1 相同的身份哈希码?

最佳答案

Is it possible that a new created object2 can have the same identity hash code as object1 got before it was GC'ed ?

是的。

当首次为对象调用该方法时,身份哈希码可能从对象的地址派生。 (或者它可能以其他方式生成。规范允许使用许多不同的机制。)

因此,如果 GC 收集了 object1,并且在与原始对象相同的地址处分配了一个新对象 object2,并且新对象可能 具有与原始相同的哈希码。

此外,如果 GC 在生成哈希码后移动 object1,则新对象 (object2) 位于 object1 的原始内容。然后,您最终可能会得到两个具有相同哈希码的现有对象。

但是这些都应该不是问题。哈希码并不是被设计为对象的标识符。 (所以不要尝试这样使用它们。)

<小时/>

My understanding of identity is that objects are unique inside a JVM at a given point in time.

身份是唯一的。身份哈希码不是。作为对象 javadoc说:

"As much as is reasonably practical, the hashCode method defined by class Object does return distinct integers for distinct objects."

这远不能保证唯一性。

然后:

"(This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required by the Java™ programming language.)"

它所指的是第一次调用hashCode()时对象的地址。 hashCode() 方法的约定规定 hashcode 值不能更改。身份哈希码...实际上...被记住为对象的一部分,以便 GC 可以移动该对象。

请注意,最新的 javadoc 已不再提及如何生成或可能生成身份哈希码。此更改发生在 Java 12 .

关于java - System.identityHashCode() 对象被 GC 后是否可以返回相同的 hashCode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34329522/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com