С Multimap
связано огромное количество накладных расходов.Как минимум:
- Каждый ключ и значение являются объектом
Integer
, который (как минимум) удваивает требования к хранилищу для каждого значения int
. - Каждый уникальный ключзначение в
HashMultimap
связано с Collection
значений (в соответствии с источником , Collection
является Hashset
). - Каждый
Hashset
созданс пространством по умолчанию для 8 значений.
Таким образом, каждой паре ключ / значение требуется (как минимум), возможно, на порядок больше места, чем можно было бы ожидать для двух значений int
.(Несколько меньше, когда несколько значений хранятся под одним ключом.) Я ожидаю, что 10 миллионов пар ключ / значение займет, возможно, 400 МБ.
Хотя у вас есть 2,5 ГБ пространства кучи, я бы не стал этим заниматься.удивлен, если этого недостаточно.Приведенная выше оценка, я думаю, на низкой стороне.Кроме того, он учитывает только то, сколько необходимо для хранения карты после ее построения.По мере роста карты таблицу необходимо перераспределять и перефразировать, что временно по крайней мере удваивает объем используемого пространства.Наконец, все это предполагает, что int
значения и ссылки на объекты требуют 4 байта.Если JVM использует 64-битную адресацию, число байтов, вероятно, удваивается.