В Java, объект имеет накладные расходы на 16 байт в качестве минимального размера , прежде чем рассмотреть, что другой контент он держит.
1E8 элементов в хэш-карта имеет требование заниженное размер из 1E8 * 2 * 16 байт, и берет на себя ключи и значения являются числами, так что требуется несколько гигабайт кучи доступных в вашей куче и от твой компьютер.
Строка представляет собой объект, содержащий массив символов, так что ваши строки , как упоминалось выше, многие могут быть больше, чем двойной объект , например, следовательно, вам потребуется больше памяти, доступной для кучи.
Обратите внимание, что программы начинают плохо работать, когда вы приближаетесь к пределу вашего компьютера.
Если вы не хотите использовать базу данных, как было предложено выше, , вы можете рассмотреть возможность кодирования и сжатия ваших ключей, чтобы сделать их номерами, которые вы все равно можете считать частотой. Вы можете выбрать кодировку на основе энтропии, основанную на частоте слов в этом первом кодировании и перейти оттуда ...
У вас работает 32-битная или 64-разрядная JVM? – nos
Что вы делаете, что требует 100 миллионов терминов? Вы работаете в Google? – DJClayworth
Почему вы хотите сохранить его в HashMap в первую очередь? Как многие предложили вы можете сохранить в базе данных, вы можете захотеть ее уменьшить (Hadoop?). Хотя это будет полностью зависеть от того, почему HashMap. – ch4nd4n