Java ConcurrentHashMap中增加分区数的缺点?

sau*_*abh 8 java concurrenthashmap data-structures

Java ConcurrentHashMap在内部维护分区.每个分区可以单独锁定.可能存在多个线程访问的所有密钥落入同一分区并且分区可能没有帮助的情况.进一步增加分区数应该可以提高并发性.

为什么Java将分区计数的默认值设置为16而不是非常高的值?地图中有大量分区的表现是什么?

Pet*_*rey 6

为什么Java将分区计数的默认值设置为16而不是非常高的值?

在同一时间使用相同的CHM时,很少有这些CPU(线程数不是那么重要).如果你真的需要这个,通常有一种更好的方法来编写你的应用程序,避免这种情况.

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

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

地图中有大量分区的表现是什么?

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