Будет ли хеш-таблица / hashmap использовать много
память, если она состоит только из объекта
ссылки и целые числа?
«много» зависит от того, сколько у вас объектов. За несколько сотен или несколько тысяч ты не заметишь.
Но обычно коллекции Java по умолчанию действительно невероятно неэффективны, когда вы работаете с примитивами (из-за постоянного переноса / распаковки из "примитив в обертку" , как, скажем, "int в целое число "), как с точки зрения производительности, так и с точки зрения памяти (оба связаны, но не идентичны).
Если у вас есть лот записей, например, сотни тысяч или миллионы, я предлагаю использовать, например, Trove коллекций.
В вашем случае вы бы использовали это:
TIntObjectHashMap<SomeJavaClass>
или это:
TObjectIntHashMap<SomeJavaClass>
В любом случае, это должно обойти окружающие коллекции Java по умолчанию как по процессам, так и по процессам (и это должно вызывать гораздо меньше GC и т. Д.).
Вы уклоняетесь от ненужного автоматического (не) бокса от / до int / Integer, коллекции создают намного меньше мусора, изменяют размеры намного умнее и т. Д.
Даже не заводите меня на стандартную Java HashMap<Integer,Integer>
по сравнению с TIntIntHashMap
от Trove, иначе я схожу с ума;)