HashMap高并发
来源:互联网 发布:传感器数据在线监控 编辑:程序博客网 时间:2024/06/14 15:13
首先讲一下HashMap的Resize机制:
1.Hashmap在插入元素过多的时候需要进行Resize,Resize的条件是
HashMap.Size >= Capacity * LoadFactor。
Resize:HashMap的容量是有限的。当经过多次元素插入,使得HashMap达到一定饱和度时,Key映射位置发生冲突的几率会逐渐提高。这时候,HashMap需要扩展它的长度,也就是进行Resize。
影响发生Resize的因素有两个:
1.Capacity
HashMap的当前长度。上一期曾经说过,HashMap的长度是2的幂。
2.LoadFactor
HashMap负载因子,默认值为0.75f。
2.Hashmap的Resize包含扩容和ReHash两个步骤,ReHash在并发的情况下可能会形成链表环。
当调用Get查找一个不存在的Key,而这个Key的Hash结果的位置恰好是带有环形链表的位置的时候,程序会进入死 循环
1.扩容
创建一个新的Entry空数组,长度是原数组的2倍。
2.ReHash
遍历原Entry数组,把所有的Entry重新Hash到新数组。为什么要重新Hash呢?因为长度扩大以后,Hash的规则也随之改变。
让我们回顾一下Hash公式:
index = HashCode(Key) & (Length - 1)
当原数组长度为8时,Hash运算是和111B做与运算;新数组长度为16,Hash运算是和1111B做与运算。Hash结果显然不同。
扩容前:
扩容后:
高并发环境下做插入操作有可能出现的环形链表:
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
(来自程序员小灰)
阅读全文
0 0
- HashMap高并发
- 高并发下的HashMap
- 高并发下的HashMap
- HashMap高并发死循环相关文章
- 漫画:高并发下的HashMap
- 【Java 高并发】并发下的ArrayList&&HashMap
- ConcurrentHashMap 高并发、高吞吐量的线程安全HashMap实现
- HashMap在高并发下引起的死循环
- HashMap在高并发下导致CPU过高
- CPU高占用和并发操作HashMap的关系
- 高并发下的HashMap有哪些问题?
- HashMap为什么线程不安全?浅析高并发情况下的HashMap
- 漫画:高并发下的HashMap引起的链表死循环原因分析
- 高并发
- 高并发
- 高并发
- 高并发
- 高并发
- 一周故事会之关于MySQL备份及恢复的二三事~
- Spring Cloud云服务- HongHu云架构common-service代码结构分析
- 为何在数据库中将手机号设为int型却保存为2147483647
- 在AS中报下列错误:
- vue2过滤器模糊查询
- HashMap高并发
- maven-resource-plugin的使用
- 华为:Access、Hybrid和Trunk三种模式的理解
- 外键ON DELETE 两种方法的测试
- 决策树可视化python代码
- 线程池的使用
- DB——数据的读取和存储方式
- deeplearning.ai 课后习题第二课第一周,初始化、加惩罚項(梯度检查后加)
- Ajax 你想要的都在这里