首页 > 编程语言 >Java 敞 HashCode

Java 敞 HashCode

时间:2023-03-30 12:44:17浏览次数:27  
标签:hash same hashCode HashCode Java 内存地址

HashCode

算法

长话短说,Java 的 Object.hashCode() 实现算法,据 get_next_hash 所述,可选方案有多种,默认为 5.

> java -XX:+UnlockExperimentalVMOptions -XX:+PrintFlagsFinal -version | findstr hashCode
< intx hashCode                    = 5                    {experimental} {default}

 所谓 0 ~ 5,即

  • <0>, global Park-Miller RNG
  • <1>, 对象内存地址与随机数的异或
  • <2>, 始终为1,仅供测试。
  • <3>, 全局递增数列
  • <4>, 对象内存地址
  • <5>, Marsaglia's xor-shift scheme with thread-specific state

时机

Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode method must consistently return the same integer.

首次调用时,非创建时。首次调用场景包含多线程下和加锁下。

更多

  • src/hotspot/share/runtime/synchronizer.cpp
  • Switch to optimal identity hash code generator - <https://bugs.openjdk.org/browse/JDK-8006176>
  • hashCode, 一个实验引发的思考 - <https://zhuanlan.zhihu.com/p/28270828>
  • Java中的hashCode()是如何实现的? - tyt2222008 - <https://blog.csdn.net/kevin_ut/article/details/8177783>

标签:hash,same,hashCode,HashCode,Java,内存地址
From: https://www.cnblogs.com/UPeRVv/p/17271856.html

相关文章

  • Java异步编程CompletableFuture
    Java通过多线程可以实现异步编程,下面是一个使用Java多线程实现异步编程的示例:publicclassAsyncDemo{publicstaticvoidmain(String[]args){Exec......
  • future.get()处理多个线程的java例子
    一种代码示例是使用ExecutorService类的submit()方法提交多个Callable任务,并返回多个Future对象,然后在主线程中循环调用Future对象的get()方法获取结果,并进行汇总1。代码......
  • Java流程控制(分支结构、循环结构)
    目录JavaSE流程控制分支结构if...else循环结构whiledowhilefor关键字JavaSE流程控制分支结构if...else//单分支,()中的条件成立,则执行if代码块if(){}//双分支,()......
  • 查询 java的安装路径 java -verbose
    java-verbose  加载Java编程语言代理,请参阅java.lang.instrument-splash:<imagepath>使用指定的图像显示启动屏幕有关详细信息,请参阅......
  • 外包杯学习进度(一) | 【Android】【Javaweb】Android与JavaWeb服务器交互教程——搭建
    前言我们老师留了一个题目,这里就不写了,第一需要攻破的问题就是如何将app中的数据域javaweb进行传递,并可以回弹消息等问题。所以就开始了解一下这方面的信息。资料积累参......
  • Java switch case语句
    Javaswitchcase语句switchcase语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。语法:switch(expression){casevalue://语句break;//可......
  • Java学习日记3
    2023.3.28学习Java打卡封装禁止直接访问一个对象中数据的实际表示,应通过操作接口来访问。程序设计要求”高内聚,低耦合“。高内聚:类的内部数据操作细节由自己完成,不允许......
  • 杨辉三角,手动输入行数---Java
    packagepractice.people.apple;importjava.util.Scanner;publicclassYangHui{publicstaticvoidmain(String[]args){ Scannermyscanner=newScanner(Syste......
  • React状态 和 JavaScript箭头函数
    React状态和JavaScript箭头函数在看React的状态时见到了JS的箭头函数,一时间没看明白。React状态React把组件看成是一个状态机(StateMachines)。通过与用户的交互......
  • JavaScript系列 -> 字符串方法 replace 的第二个参数为函数
    本篇文章要介绍,当字符串的replace方法第二个参数为函数的使用。示例代码:functionfn(str){this.str=str;}fn.prototype.format=function(){vararg=......