У меня есть очень большая хэш-карта (более 2 миллионов записей), которая создается путем чтения содержимого файла CSV. Некоторая информация:
- HashMap отображает ключ String (который составляет менее 20 символов) в значение String (которое составляет приблизительно 50 символов).
- Этот HashMap инициализируется с начальной емкостью 3 миллиона, так что коэффициент загрузки составляет около 0,66.
- HashMap используется только одной операцией, и как только эта операция завершена, я «очищаю ()» ее. (Хотя это не похоже на то, что эта очистка на самом деле очищает память, нужен ли отдельный вызов System.gc ()?).
Одна идея, которая у меня возникла, состояла в том, чтобы изменить HashMap на HashMap и использовать в качестве ключа хэш-код String, это в конечном итоге сэкономит немного памяти, но рискует столкнуться с коллизиями, если две строки имеют идентичные хэш-коды ... скорее всего это для строк длиной менее 20 символов?
У кого-нибудь еще есть идеи о том, что здесь делать? Размер самого CSV-файла составляет всего 100 МБ, но java использует более 600 МБ памяти для этой HashMap.
Спасибо!