与 HashMap 相比,ConcurrentHashMap 的性能如何,尤其是 .get() 操作(我对只有少数项目的情况特别感兴趣,范围可能在 0-5000 之间)?
有什么理由不使用 ConcurrentHashMap 而不是 HashMap 吗?
(我知道不允许空值)
更新
只是为了澄清,显然在实际并发访问的情况下性能会受到影响,但是在没有并发访问的情况下如何比较性能?
最佳答案
我真的很惊讶地发现这个话题如此古老,而且还没有人提供任何关于这个案例的测试。使用 ScalaMeter
我已经为 add
、 get
和 0x2518122231343141 创建了 0x25181223141 和 0x2518122231343141 的测试,分别用于 2134 和 2134 两种场景:
remove
不是线程安全的,我只是为每个线程创建了单独的 HashMap
,但使用了一个共享 ConcurrentHashMap
。 代码可用 on my repo 。
结果如下:
摘要
HashMap
,它只是更快。对于 HashMap
方法,它的效率甚至提高了 3 倍。只有 ConcurrentHashMap
在 HashMap
上更快,但不多。 add
上操作时,对于每个线程在单独的 get
上操作同样有效。因此无需将您的数据划分为不同的结构。 综上所述,
ConcurrentHashMap
在单线程使用时性能较差,但增加更多线程来完成工作肯定会加快进程。 关于java - 性能 ConcurrentHashmap 与 HashMap,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1378310/