GC в то время как цикл - PullRequest
       4

GC в то время как цикл

0 голосов
/ 10 сентября 2018

Я попытался запустить следующий код на jenkins, чтобы преобразовать файл в строку, а затем преобразовать строку в поток байтов.Задание jenkins не выполнено из-за OutOfMemoryError [java.lang.OutOfMemoryError: пространство кучи Java].Как я могу сделать сборку мусора в цикле while, чтобы избежать OutOfMemoryError?

String content = steps.readFile("doc_html.tar.gz")
InputStream inp = null
inp = new ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8))

byte[] buffer = new byte[4096];
int bytesRead = -1;
while ((bytesRead = inp.read(buffer)) != -1) {
        outputStream.write(buffer);
}
outputStream.flush();
inp.close();

1 Ответ

0 голосов
/ 10 сентября 2018

Сборка мусора разработана таким образом, что, когда у вас заканчивается процесс памяти, он попытается освободить больше памяти, если это возможно. Так что в большинстве случаев, если у вас заканчивается память, этого не произойдет, потому что JVM вызывала не сборщик мусора, а потому, что вы действительно используете слишком много памяти. В вашем случае вы читаете весь файл с первой строки в память. После этого вы создаете входной поток из байтов вашего файла в памяти и обрабатывает байты. Возможно, вам больше подойдет использование FileInputStream напрямую для потоковой передачи байтов из файла и их обработки вместо того, чтобы сначала кэшировать полный файл в String.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...