ConcurrentHashMap 的桶 bucket 越小
每次锁住的元素就少
感觉有利于同步性能
那么弊端是什么?
1
gejun123456 2017-08-23 20:54:13 +08:00 via Android
占用内存大,扩容时慢
|
2
guyeuro OP @gejun123456 为何占内存大?
|
3
yidinghe 2017-08-23 21:13:25 +08:00 via Android
“ HashTable 容器在竞争激烈的并发环境下表现出效率低下的原因是所有访问 HashTable 的线程都必须竞争同一把锁,那假如容器里有多把锁,每一把锁用于锁容器其中一部分数据,那么当多线程访问容器里不同数据段的数据时,线程间就不会存在锁竞争,从而可以有效的提高并发访问效率,这就是 ConcurrentHashMap 所使用的锁分段技术,首先将数据分成一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问。”
欲知进一步详情,请看 http://www.infoq.com/cn/articles/ConcurrentHashMap/ |
4
xiaxiaocao 2017-08-23 21:31:10 +08:00 via iPhone
锁力度小主要是求 size,rehash 这些操作会开销更大。事实上 Java8 的 CHM 实现已经是到 slot 这个锁粒度了,size 都是一个类似于 LongAdder 的结构来单独记录
|