A HashMap
- это обычно большой массив ссылок, заполненный до определенного процента емкости. Если заполнено только 80% карты, оставшиеся 20% ячеек массива не используются (т. Е. Являются нулевыми). Дополнительные издержки - это только пустые (нулевые) ячейки.
В 32-разрядном ЦП каждая ячейка массива обычно имеет размер 4 байта (хотя некоторые реализации JVM могут выделять 8 байтов). Это не так уж много неиспользуемого пространства в целом.
Как только ваша карта заполнена, вы можете скопировать ее в другую HashMap
с более подходящим (меньшим) размером, дающим больший процент заполнения.
Ваш вопрос подразумевает, что есть больше выделенных, но неиспользуемых объектов, о которых вы беспокоитесь. Но как это так?
Добавление
Как только карта заполнена почти до полной емкости (обычно более 95% или около того), выделяется больший массив, содержимое старого массива копируется в новый массив, а затем меньший массив остается для сбора мусора. Это, очевидно, дорогостоящая операция, поэтому выбор достаточно большого начального размера карты является ключом к повышению производительности.
Если вы можете (сверх) оценить необходимое количество ячеек, предварительное выделение карты может уменьшить или даже устранить операции изменения размера.