ConcurrentHashMap中的散列算法有什么含义

博客探讨了为何在编程中选择与高16位部分进行异或运算,指出这能确保高位参与运算,增加结果的随机性。同时,异或运算因其结果的均匀分布,被用于提高并发环境下HashMap的性能。还提到了JDK1.8的HashMap在高并发下的改进,以及ConcurrentHashMap的size()方法中使用@sun.misc.Contended注解以避免伪共享影响性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天无聊又去看看源码,有了2个思考。

1.为什么选择本身与高16位部分做运算

2.为什么选择异或算法

答:与右移16位后的本身做异或运算是为了让高16位也参与运算,使得结果更加的随机,不然基本大多数情况只有低位参与运算。而之所以选择异或运算,是因为,异或运算的结果更平均,例如1和0做异运算,(1和1,1和0,0和1,0和0)4种情况有3种结果是0,一种是1。或运算则1种结果为1,3种为0。而异或运算是2种结果为1,2种结果为0.更平均。 更加的随机+更加的平均。

总结:虽然没啥用,但是觉得很有意思

tips:

1.JDK1.8的hashmap在高并发下已经没有环形链表问题了别忘了。

2.ConcurrentHashMap的size()方法中引用的内部类CounterCell使用的@sun.misc.Contended注解是为了独占CPU的缓存行,避免伪共享影响性能。类似1.7的在类中填充变量达到64字节来实现一样的效果,但是考虑到JVM会对代码做优化,无用的代码可能会被删掉导致无效。所以1.8有了这样的优化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值