Вы можете догадаться, и вы можете сделать обоснованное предположение, посмотрев на размер каждого элемента, который входит в карту, но ваше лучшее образованное предположение будет неверным.
JVM имеют другую структуру, используемую для отслеживания ссылок и хранения информации о типах для классов. Это добавит фиксированный, но пока неизвестный объем памяти к точной (если вы можете получить точную оценку входных данных) оценке.
Поскольку только часть памяти является памятью, непосредственно хранящей данные, а часть памяти является памятью, используемой в качестве служебной информации для хранения данных, вам необходимо профилировать потребление памяти и основывать свои оценки на прогнозах роста памяти. при использовании меньших карт.
Обратите внимание, что профилирование JVM является сложной задачей, поскольку оно оптимизирует использование памяти способом, который будет давать различные результаты в зависимости от того, как долго работает JVM, активности карты и т. Д. Вам необходимо выполнить статистическую выборку. ввода в различных условиях; но, шансы хорошие, вы в конечном итоге сможете поставить разумное число. Что еще более важно, вы также сможете сказать: «Ну, это может временно увеличиться примерно до этого числа, но в среднем должно быть доведено до этого». Временные изменения в памяти часто игнорируются при статическом анализе.