Ошибка OOM при чтении 2GB XML-файла в Java - PullRequest
0 голосов
/ 23 сентября 2018

Я пытался прочитать XML-файл размером 2 ГБ.Я следовал различным методам, чтобы прочитать его, но каждый из этих методов дает OutOfMemoryError Я даже пытался увеличить максимальный размер кучи до 4 ГБ и минимальный размер кучи 2 ГБ в eclispe, но проблема все еще сохраняется.Как я могу решить эту проблему?Я не хочу использовать какие-либо сторонние библиотеки.

Ниже приведен код, который я пробовал до сих пор

String str = new String(Files.readAllBytes(Paths.get(pathname)),
                    StandardCharsets.UTF_8);

и

try(Scanner scanner = new Scanner(new File(pathname))) {

while ( scanner.hasNextLine() ) {

    String line = scanner.nextLine();

   }

}

1 Ответ

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

Каждый символ использует как минимум 2 байта, и вам также нужна память для обработки.Я бы выделил ему намного больше памяти, например, 24 ГБ, и посмотрел бы, сколько ему действительно нужно.

Примечание. В Java 9+ есть сжатая строка, которая может снизить потребление.

Лучшим подходом является использование SAX.синтаксический анализатор для обработки файла при его чтении, который будет использовать крошечную долю памяти.

...