Как содержимое Hashtable влияет на его размер в памяти? - PullRequest
1 голос
/ 24 июня 2010

Если у меня есть Hashtable A, в котором 5 миллионов ключей сопоставлены с 5 миллионами уникальных значений, и у меня есть Hashtable B, в котором 5 миллионов ключей сопоставлены с 20 уникальными значениями, то примерно на сколько памяти будет использоваться Hashtable A по сравнению с Hashtable B

Все ключи и значения являются строками длиной примерно 20-50 символов.

Мое первоначальное предположение состоит в том, что Hashtable A будет занимать примерно вдвое больше места, чем Hashtable B, но если вы включите отображения, то Hashtable B будет использовать:

(5 миллионов ключей + 5 миллионов сопоставлений + 20 значений) / (5 миллионов ключей + 5 миллионов сопоставлений + 5 миллионов значений) = .66

66,6% памяти, используемой Hashtable A. Однако я не знаю, будет ли отображение использовать столько же места, сколько ключ или значение, если ключи и значения являются строками.

Комментарии

Ответы [ 2 ]

2 голосов
/ 24 июня 2010

Я не думаю, что это во многом связано с хеш-таблицей, поскольку «значения» хеш-таблицы являются просто ссылками на то, что я предполагаю, являются существующими значениями.Увеличение общей стоимости будет основываться главным образом на размере стоимости.В конце концов, вы можете сопоставить каждый ключ с нулем.

Кроме того, в зависимости от размера ваших ключей, это может иметь или не иметь влияние.Например, сопоставление от 5 миллионов тяжелых объектов (например, строк) до 5 миллионов более легких объектов, таких как целые числа, не будет так сильно отличаться от сопоставления 5 миллионов тяжелых объектов с 20 различными значениями целых чисел.

0 голосов
/ 24 июня 2010

Если вы храните буквенные строки, тогда JVM может их интернировать, и в этом случае 20-клавишная версия будет использовать значительно меньше памяти (насколько меньше я не знаю, как рассчитать). Но для стандартной реализации хеш-таблицы, которая не подвержена такой магии, они оба будут использовать один и тот же объем памяти, поскольку каждый «сегмент» будет хранить значение, независимо от того, хранится ли это значение и в других сегментах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...