Java 里 ConcurrentHashMap 的桶 bucket 的小的话有何弊端?

2017-08-23 19:51:14 +08:00
 guyeuro

ConcurrentHashMap 的桶 bucket 越小

每次锁住的元素就少

感觉有利于同步性能

那么弊端是什么?

1811 次点击
所在节点    问与答
4 条回复
gejun123456
2017-08-23 20:54:13 +08:00
占用内存大,扩容时慢
guyeuro
2017-08-23 21:10:44 +08:00
@gejun123456 为何占内存大?
yidinghe
2017-08-23 21:13:25 +08:00
“ HashTable 容器在竞争激烈的并发环境下表现出效率低下的原因是所有访问 HashTable 的线程都必须竞争同一把锁,那假如容器里有多把锁,每一把锁用于锁容器其中一部分数据,那么当多线程访问容器里不同数据段的数据时,线程间就不会存在锁竞争,从而可以有效的提高并发访问效率,这就是 ConcurrentHashMap 所使用的锁分段技术,首先将数据分成一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问。”

欲知进一步详情,请看 http://www.infoq.com/cn/articles/ConcurrentHashMap/
xiaxiaocao
2017-08-23 21:31:10 +08:00
锁力度小主要是求 size,rehash 这些操作会开销更大。事实上 Java8 的 CHM 实现已经是到 slot 这个锁粒度了,size 都是一个类似于 LongAdder 的结构来单独记录

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/385272

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX