首页 > Java > java教程 > 正文

当'hashCode()”未被重写时,Java 如何生成哈希码?

Mary-Kate Olsen
发布: 2024-10-31 21:17:02
原创
440 人浏览过

How Does Java Generate Hash Codes When `hashCode()` is Not Overridden?

Java 中的默认哈希代码行为

如果 hashCode() 方法未被重写,则在 Java 中的对象上调用它会产生一个系统-生成的哈希码。

底层机制

在 HotSpot JVM 中,hashCode 通常由以下方法之一确定:

  • 随机数(Java 7 中的默认值): 生成随机数并将其存储在对象头中。这种默认方法在高并发环境中引入了竞争条件或延迟的可能性。
  • 线程本地随机生成器(Java 8 中的默认值): 线程本地随机生成器用于避免竞争条件并提高性能。
  • 对象指针:对象指针与随机值混合以生成哈希码。但是,此方法可能会导致哈希表分布不佳。

可控行为

可以使用 -XX 修改哈希代码生成的行为: hashCode=n HotSpot JVM 选项。可用值如下:

  • 0(Java 7 中的默认值):全局随机生成器
  • 5(Java 8 中的默认值):线程本地异或移位随机生成器
  • 1:对象指针与随机值混合
  • 2:始终为 1
  • 3:自动递增数字
  • 4:对象指针修剪为 32 位

需要注意的是,即使使用 -XX:hashCode=4 选项,由于潜在的对象移动,哈希码也可能并不总是对应于对象地址。

以上是当'hashCode()”未被重写时,Java 如何生成哈希码?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!