2015-08-17 3 views
0

Я анализирую XML-файл размером 2 ГБ. Для Parsing am с использованием библиотеки Xstream, Его ждет 5 минут, затем он бросает java.lang.OutOfMemoryError: GC overhead limit exceeded.XML Parsing throwing java.lang.OutOfMemoryError: превышен верхний предел GC

Можете ли вы предоставить решение для разбора большого количества XML-файлов. Можете ли вы предоставить альтернативы более синтаксическому анализу XML-файлов.

Обновление: Я сделал с использованием анализатора JaxB + Stax для разрешения производительности и разрешил java.lang.OutOfMemoryError: превышение лимита накладных расходов GC превысило исключение.

+2

Показать ваш код. Каковы настройки вашей JVM-памяти? Пожалуйста, прочитайте http://stackoverflow.com/help/how-to-ask – reto

ответ

1

Вы должны пойти для анализатора, который не загрузил бы весь xml в память.

SAX или если вас интересует только подмножество xml, то Stax.

Даже в этих случаях ваша память может быть забита данными, которые вы анализируете и заполняете в структуру данных по вашему выбору.

Вы должны взглянуть на нижеследующий ответ How to Parse Big (50 GB) XML Files in Java

0

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

http://docs.oracle.com/javase/7/docs/api/javax/xml/parsers/SAXParser.html

Как весь файл не будет в памяти, он не гарантирует проверку XML-файла при запуске. Подробнее о парсере here.

+0

SAX основан на событиях. Может быть, проще использовать StAX, который является синтаксическим анализатором, который также обрабатывает большие файлы: https://docs.oracle.com/javase/tutorial/jaxp/stax/index.html – Andreas

Смежные вопросы