gpt4 book ai didi

java - 性能 ConcurrentHashmap 与 HashMap

转载 作者:IT老高 更新时间:2023-10-28 20:22:32 25 4
gpt4 key购买 nike

ConcurrentHashMap 与 HashMap 相比性能如何,尤其是 .get() 操作(我对只有少数项目的情况特别感兴趣,可能在 0-5000 之间)?

有什么理由不使用 ConcurrentHashMap 而不是 HashMap?

(我知道空值是不允许的)

更新

澄清一下,显然在实际并发访问的情况下性能会受到影响,但是如何比较没有并发访问情况下的性能呢?

最佳答案

我很惊讶地发现这个话题如此古老,但还没有人提供任何关于这个案例的测试。使用 ScalaMeter 我为 HashMap 创建了 addgetremove 测试和ConcurrentHashMap分两种场景:

  1. 使用单线程
  2. 使用尽可能多的线程,因为我有可用的内核。 请注意,因为 HashMap 不是线程安全的,我只是为每个线程创建了单独的 HashMap,但使用了一个共享的 ConcurrentHashMap

代码可用on my repo .

结果如下:

  • X 轴(大小)表示写入 map 的元素数量
  • Y 轴(值)以毫秒为单位显示时间

Add method Get method Remove method

总结

  • 如果您想尽快对数据进行操作,请使用所有可用线程。这似乎很明显,每个线程都有 1/n 的全部工作要做。

  • 如果选择单线程访问使用HashMap,简直是更快。对于 add 方法,它的效率甚至提高了 3 倍。只有 getConcurrentHashMap 上更快,但并不快。

  • 在具有多个线程的 ConcurrentHashMap 上操作时,对于每个线程在单独的 HashMaps 上操作同样有效。因此无需将数据划分为不同的结构。

综上所述,ConcurrentHashMap的性能在单线程使用时会更差,但是添加更多线程来完成工作肯定会加快进程。

Testing platform

AMD FX6100, 16GB Ram
Xubuntu 16.04, Oracle JDK 8 update 91, Scala 2.11.8

关于java - 性能 ConcurrentHashmap 与 HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1378310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com