Я реализую внешний вид для большого файла (~ 30 ГБ), поэтому после того, как я написал фрагменты на диске, создаю chunks
раз BufferedReader(new OutputStreamWriter(new FileOutputStream(outputPath), "UTF-8"), maxBufferSize)
, являющийся maxBufferSize = Runtime.getRuntime().freeMemory()/chunks
. Однако я получаю исключение OutOfMemory
.JVM из памяти
Я предполагаю, что сборщик мусора не успел очистить память (когда я останавливаюсь с отладчиком, он не генерирует исключение), но в этом случае почему Runtime.getRuntime().freeMemory()
получил этот результат?
Можно ли явно вызвать сборку мусора, или единственный вариант - спящий процесс в течение некоторого времени?
Возможный дубликат [Можно ли явно называть сборщик мусора?] (Http://stackoverflow.com/questions/15632734/can-we-call-the-garbage-collector-explicitly) –
Обратите также внимание на то, что freeMemory() сообщает вам общую сумму свободного места в куче, но нет никакой гарантии, что существует один непрерывный блок, который большой (на самом деле, как правило, это не так). –
Было бы важно знать, что вы получаете от OutOfMemoryError, не зная, что мы можем отправить вас в совершенно неправильном направлении. Также некоторый (релевантный) код был бы хорош .... –