Как мы знаем, java ConcurrentHashMap имеет ряд внутренних блокировок, и каждый из них защищает некоторую область массива ведра.
Вопрос: почему мы не можем создать блокировку для каждого ведра?
Уже был задан подобный вопрос: Недостаток увеличения количества разделов в Java ConcurrentHashMap?
В соответствии с ответом есть несколько причин:
-
максимальное число потоков, работающих одновременно, ограничено количеством ядер процессора. Это правильно? Можем ли мы ВСЕГДА сказать, что если у нас есть 8-ядерный процессор, нам не нужно больше 8 заблокированных областей в ConcurrentHashMap?
-
Отходы кэша L2 теряются. Почему?
-
Существует пустая память. Похоже, это связано с дополнительным созданием блокировки.
Есть ли еще причины?