Kar*_*ter 3 java concurrency concurrenthashmap java.util.concurrent
我想知道size()调用ConcurrentHashMap的size()方法是否与通常的HashMap方法具有相同的复杂性.
新实施的ConcurrentHashMap.size()在JDK 8采用的是酷的算法,他们那种从复制粘贴LongAdder.
实际上,复杂性ConcurrentHashMap.size()几乎是恒定的(书呆子语言中的"O(1)"),与实际成本相比HashMap.size()可以忽略不计.不相信我?打开我的基本测试项目并自己运行.我没有在我当前的机器上安装JDK 7,与Java 1.8相比,使用Java 1.7获得时间成本反馈会很酷.
事实并非如此.在我的JDK版本中,HashMap.size()具有O(1)复杂性,而ConcurrentHashMap.size() 在最好的情况下必须迭代段.在最坏的情况下,它将锁定所有段,这在多线程场景中可能是相当昂贵的操作.
当然,哪个更快是一个完全不同的问题.答案在很大程度上取决于访问地图的线程数量,以及它们正在做什么.
size()on 的复杂性HashMap是O(1)因为大小存储在字段中.如果我们看一下size()on 的实现ConcurrentHashMap,我们看,它更大(> O(1))
参考(openjdk-6)
| 归档时间: |
|
| 查看次数: |
3656 次 |
| 最近记录: |