concurrenthashmap 采用自动调整大小的数组锁,是不是效率更高一点呢?
来源:互联网 发布:企业邮箱需要域名吗 编辑:程序博客网 时间:2024/05/12 08:30
1. 在基于哈希的集合算法中,如果每个表项都与单个元素相关联,则成为开放地址法。
如果每个表项指向一个元素集(成为桶),则称为封闭地址法。
2. 任何一个哈希集算法都要解决冲突问题:当两个不同的元素哈希到同一个表项时该如何处理。
开发地址算法通常使用另外一个哈希函数来检测可替换的表项。封闭地址算法则将冲突元素放在同一个桶中,直到这个桶变得太满为止。
这两种算法都需要重新调整表的大小。在开放地址算法中,表有可能变得太满以致无法找到可替代的表项;
而封闭地址算法中,桶油可能变得过大以致于无法进行有效的查找。
3.封闭地址哈希集
1. 考虑三种可替换使用的同步技术:
一种采用单一的粗粒度锁;一种使用固定大小的锁数组;另一种使用大小可变的锁数组。
粗粒度哈希集易于实现且很好理解。然而,这种哈希集却是一个顺序瓶颈。如HashTable
固定大小的锁数组又称为空间分带哈希集。
2. 细粒度哈希集
如果要细化锁的粒度,使得在一个分片里的单元个数不会连续增长,应该怎么做?
显然,如果要调整锁数组的大小,需要另一种形式的同步。由于很少重新调整,所以我们的主要目标是
设计一种方法以允许锁数组大小被调整,同时又不会增加正常方法调用的代价。
concurrenthashmap 的原理是将集合划为独立同步的片,也就是空间分带哈希。
那么问题来了,JDK为什么不采用细粒度哈希集?自动调整大小的数组锁,是不是效率更高一点呢?
如果每个表项指向一个元素集(成为桶),则称为封闭地址法。
2. 任何一个哈希集算法都要解决冲突问题:当两个不同的元素哈希到同一个表项时该如何处理。
开发地址算法通常使用另外一个哈希函数来检测可替换的表项。封闭地址算法则将冲突元素放在同一个桶中,直到这个桶变得太满为止。
这两种算法都需要重新调整表的大小。在开放地址算法中,表有可能变得太满以致无法找到可替代的表项;
而封闭地址算法中,桶油可能变得过大以致于无法进行有效的查找。
3.封闭地址哈希集
1. 考虑三种可替换使用的同步技术:
一种采用单一的粗粒度锁;一种使用固定大小的锁数组;另一种使用大小可变的锁数组。
粗粒度哈希集易于实现且很好理解。然而,这种哈希集却是一个顺序瓶颈。如HashTable
固定大小的锁数组又称为空间分带哈希集。
2. 细粒度哈希集
如果要细化锁的粒度,使得在一个分片里的单元个数不会连续增长,应该怎么做?
显然,如果要调整锁数组的大小,需要另一种形式的同步。由于很少重新调整,所以我们的主要目标是
设计一种方法以允许锁数组大小被调整,同时又不会增加正常方法调用的代价。
concurrenthashmap 的原理是将集合划为独立同步的片,也就是空间分带哈希。
那么问题来了,JDK为什么不采用细粒度哈希集?自动调整大小的数组锁,是不是效率更高一点呢?
0 0
- concurrenthashmap 采用自动调整大小的数组锁,是不是效率更高一点呢?
- ConcurrentHashMap多线程下比HashTable效率更高
- iframe 的自动大小调整
- CSpitterWnd的自动调整大小
- 站的更高一点
- java获得文件夹或者文件的大小,如果要获得磁盘大小用jconfig效率更高
- 以下3个函数实现的功能一样,哪个效率更高呢,路过的讨论下!
- 是不是这样的呢
- qt 自动调整大小的实现
- Qt中自动调整大小的实现
- vb中自动调整控件的大小
- ueditor上传的图片自动调整大小
- ConcurrentHashMap的一点理解
- 栈的实现,动态调整数组大小
- IFrame自动调整大小
- IFrame 自动调整大小
- iframe自动调整大小
- 根据浏览器的大小,自动调整Silverlight的大小
- iOS编程--AVCapture编程理解--自定义相机
- C语言结构体中定义函数指针
- 编程技巧 - NSString - 1
- Gson使用简记
- git分支操作整理
- concurrenthashmap 采用自动调整大小的数组锁,是不是效率更高一点呢?
- UE4启动器是否有办法添加本地版本
- 编译配置nginx-rtmp-moule
- android端获取网络数据添加到二级列表ExpandableListView
- iOS runtime运行机制
- 在UIView中抠透明区域
- android中文教程
- Android 颜色对照表
- 把redis安装到ubuntu-14.04.1-server