2014-12-13 3 views
-2
ConcurrentHashMap chm= new ConcurrentHashMap(8,1,16); 

Теперь в соответствии с приведенной выше конфигурацией ConcurrentHashMap разделит таблицу на 16 сегментов. Теперь каждый сегмент представляет собой индивидуальный hasmap. Возьмем размер объекта записи как x байтов. Тогда какая память выделяется для каждого сегмента. Согласно моему пониманию, в таблицу должны быть выделены только 8x байтов, а затем, как она будет разделена на 16 сегментов. Потому что здесь уровень параллелизма равен 16, а размер таблицы - 8. 8x/16 - 0.5x, чего недостаточно, чтобы добавить одну запись.Выделение памяти ConcurrentHashMap

+0

Попытайтесь понять вопрос. Я очень хорошо знаю работу ConcurrentHashMap. Я спрашиваю, как 8 блоков можно разделить на 16 сегментов. –

ответ

1

Из исходного кода в свободном доступе и приходить с JDK:

if (initialCapacity < concurrencyLevel) // Use at least as many bins 
    initialCapacity = concurrencyLevel; // as estimated threads 

Так, короче говоря, если вы передадите аргументы, которые не имеют смысла, он фиксирует это для вас.

+0

спасибо, что я искал то же самое. код, который у меня есть из ссылки google, не содержит то же самое, поэтому был немного смущен –