Java ConcurrentHashMap 在内部维护分区。每个分区可以单独加锁。
在某些情况下,多个线程访问的所有键都落入同一分区,而分区可能没有帮助。
进一步增加分区数量应该会提高并发性。
为什么 Java 为分区计数提供默认值 16,而不是非常高的值?
Map 中大量分区的性能如何?
为什么 Java 为分区计数提供默认值 16,而不是非常高的值?
这么多CPU(线程数并不那么重要)同时使用同一个CHM 的情况非常罕见。如果您确实需要这样做,通常有一种更好的方法来编写应用程序来避免这种情况。
例如,假设您有 1000 个线程,但只有 8 个 CPU。这意味着最多只有 8 个线程会运行并访问 CHM,假设您的程序不执行任何有用的操作,例如还要别的吗。
在实际程序中,一个集合的使用时间超过 10% 的情况很少见。这是因为通常会涉及一些 IO,或者重组线程以使用自己的集合副本并在最后将它们收集在一起是有意义的,例如映射减少
Map 中大量分区的性能如何?
你浪费了一点内存,这并不重要,但主要是浪费了一些 L1 缓存,L1 缓存仅限于 32 KB,是相对宝贵的资源。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)