Обычно к действиям нужно относиться, с чем Вы делаете действие... в этом случае стог сена, таким образом, я думаю, что опция 2 является самой соответствующей.
у Вас также есть четвертая альтернатива, что я думаю, было бы лучше, чем альтернативные 3:
haystack.find(needle, searcher)
В этом случае, это позволяет Вам обеспечивать способ, которым Вы хотите искать как часть действия, и таким образом, можно сохранить действие с объектом, на котором управляют.
Редактировать; Ой, я идиот, я дал информацию для HashMap, а не для HashTable. Однако после проверки реализации идентичны для целей памяти.
Это зависит от настроек внутренней памяти вашей виртуальной машины (упаковка элементов, 32-битные или 64-битные указатели и выравнивание / размер слов) и не определяется java.
Базовую информацию об оценке использования памяти можно найти здесь .
Вы можете оценить это так:
Итак, сложим все вместе (для 32/64 бит Sun HotSpot JVM):
Итак, собираем все вместе (для 32/64 битной JVM Sun HotSpot):
Итак, собираем все вместе (для 32/64 битной JVM Sun HotSpot):
Итак, собираем все вместе (для 32/64 битной JVM Sun HotSpot):
Итак, сложим все вместе (для 32/64 бит Sun HotSpot JVM):
HashMap требуется 24 байта (сам, основные поля) + 12 байтов (константа массива слотов) + 4 или 8 байтов на слот + 24/40 байтов на запись + размер ключевого объекта + размер объекта значения + дополнение каждого объекта до кратного 8 байтам ИЛИ примерно (в большинстве настроек по умолчанию, точность не гарантируется): Примечание: это требует дополнительной проверки, может потребоваться 12 байтов для служебных данных объекта на 64-битной виртуальной машине.
Насчет нулей я не уверен - указатели на нули могут быть как-то сжаты.
Трудно оценить. Я бы сначала прочитал это: http://www.codeinstructions.com/2008/12/java-objects-memory-structure.html
Just use the sunjdk tools to figure out the size of K, V and
jmap -histo [pid]
num #instances #bytes class name
1: 126170 19671768 MyKClass
2: 126170 14392544 MyVClass
3: 1 200000 MyHashtable
Also you may want to use HashMap instead of Hashtable if you do not need synchronization.