java - Java ConcurrentHashMap 分区数量增加的缺点?

标签 java data-structures concurrenthashmap

Java ConcurrentHashMap 在内部维护分区。每个分区可以单独锁定。 在某些情况下,多个线程访问的所有键都落在同一个分区中,分区可能没有帮助。 进一步增加分区数应该会提高并发性。

为什么 Java 为分区计数提供默认值 16 而不是非常高的值? Map 中有大量分区时的性能窃听是什么?

最佳答案

Why does Java provides default value for partition count as 16 instead of very high value?

同时使用同一个 CHM 的情况非常少见。如果您真的需要这个,通常有更好的方法来编写您的应用程序来避免这种情况。

例如假设您有 1000 个线程但只有 8 个 CPU。这意味着最多只有 8 个线程将运行并访问 CHM,假设您的程序没有做任何有用的事情,例如其他任何东西。

在实际程序中,一个集合的使用次数很少会超过 10%。这是因为通常涉及一些 IO,或者重组线程以使用它们自己的集合副本并在最后将它们收集在一起是有意义的,例如Map-Reduce

What is the performance overhear with large number of partitions in the Map?

你浪费了一点内存,这无关紧要,但主要是你浪费了一些限制在 32 KB 以内的 L1 缓存和相对宝贵的资源。

关于java - Java ConcurrentHashMap 分区数量增加的缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17233924/

相关文章:

java - Job Scheduler 有时不会被触发

java - 为什么我的一个类的自定义成员变量在其他类中没有更新?

java - 如何检查 session 在java中是否已过期?

r - R中反转下三角矩阵的树列表

dictionary - 可在 map 上观察以检测何时添加、更新或删除条目

java - Tomcat 7 Maven 构建因 Jersey 而失败

algorithm - 获得最接近的 k 项的最有效实现

c - LinkedList : Why there is need to declare a new struct node current? 如果我使用参数 head 进行跟踪,代码工作得很好吗?

java - 如何在多线程应用程序中自动更新ConcurrentMap的值?

java - 如何将空值添加到 ConcurrentHashMap