Мы все избили с ошибкой OutOfMemory
. Это происходит, если мы храним больше символов, чем предел String
, если мы превысим предел StringBuffer
, если мы превысим лимит ArrayList
и так далее. Существует большой список. Но стоит отметить, что крупнейшие в мире проекты Big Data построены на Java, включая Amazon. Поэтому у меня есть вопрос. Может ли Java хранить в памяти 70 МБ файл? Этот файл содержит текст, и каждая отдельная строка этого файла будет сохранена как элемент в LinkedList
. Итак, если файл получил 200 000 строк, то LinkedList
будет содержать 200 000 элементов. Представьте, что у меня есть оперативная память 4-5 ГБ.Java VS RAM: Сколько данных Java может обрабатывать без 'OutOfMemory'?
Может ли Java обрабатывать что-то вроде этого, не бросая OutOfMemory
? В любом случае, я не хочу вручную изменять размер кучи.
Ваш совет?
Update
Не предназначаться для 70MB. Представьте, что в будущем это заполнение составит 300 ГБ. У меня есть оперативная память 500 ГБ (да, я в большом проекте данных, RAM больше, чем это в любом случае). Что теперь?
Вы можете отобразить файл в памяти и сохранить указатели на разные строки. Это даже проще, если линии имеют одинаковую длину, конечно. И сопоставления файлов не «загрязняют» кучу. См. 'FileChannel.map()'. – fge
Это скорее настройка JVM, чем ограничение языка. ' – thatidiotguy
@fge: Пожалуйста, взгляните на обновление. – Dongle