Java - Apache poi приводит к java.lang.OutOfMemoryError: превышен предел издержек GC - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь открыть файл Excel размером 22MB, содержащий 9905 строк (на мой взгляд, не такой большой).

Я пытаюсь открыть его следующим образом: java apache poi:

final File f = Utils.getFileWithRespectToJar(this, filename);
final Workbook workbook = WorkbookFactory.create(f);

final Sheet sheet = workbook.getSheetAt(0);
final int maxRowLength = sheet.getLastRowNum();

Через несколько секунд java занимает около 3,3 ГБ ОЗУ и 90% ЦП, и примерно через минуту мой проект Eclipse аварийно завершает работу, за исключением

java.lang.OutOfMemoryError: превышен лимит накладных расходов GC

apache poi просто очень не работает или я что-то не так делаю?

Редактировать: Ранее я использовал файл .xlsm (файл Excel с включенными макросами). Я снова сохранил его как файл .xlsx (макросы отключены) и увеличил размер кучи до 4GB. Теперь Java занимает 4GB ОЗУ (= 90%) и 90% ЦП примерно за 15 минут до сбоя моего приложения Eclipse. Я использовал apache poi 3.16 и обновил свой maven pom файл для использования 4.0.0 (последняя версия), но эта новая версия работает по-другому, поэтому я получаю много исключений, например:

org.apache.poi.ooxml.POIXMLException: org.apache.xmlbeans.XmlOptions.setEntityExpansionLimit (I), Lorg / Apache / XMLBeans / XmlOptions; в org.apache.poi.ooxml.POIXMLFactory.createDocumentPart (POIXMLFactory.java:66) в org.apache.poi.ooxml.POIXMLDocumentPart.read (POIXMLDocumentPart.java:648) в org.apache.poi.ooxml.POIXMLDocument.load (POIXMLDocument.java:180) в org.apache.poi.xssf.usermodel.XSSFWorkbook. (XSSFWorkbook.java:286) в org.apache.poi.xssf.usermodel.XSSFWorkbookFactory.createWorkbook (XSSFWorkbookFactory.java:83) в org.apache.poi.xssf.usermodel.XSSFWorkbookFactory.createWorkbook (XSSFWorkbookFactory.java:111)

Причина: java.lang.NoSuchMethodError: org.apache.xmlbeans.XmlOptions.setEntityExpansionLimit (I), Lorg / Apache / XMLBeans / XmlOptions; в org.apache.poi.ooxml.POIXMLTypeLoader. (POIXMLTypeLoader.java:43) в org.apache.poi.xssf.model.ThemesTable. (ThemesTable.java:86)

1 Ответ

0 голосов
/ 31 октября 2018

Я удалил все форматирование ячеек и макросы, поэтому в основном файл Excel теперь только черный текст, и apache poi больше не падает.

...