Я записываю огромные данные в лист Excel. Я использую XSSFWorkbook для создания Excel.
Для 20000 строк отлично подходит запись Excel. Но когда я пытаюсь записать данные объемом более 1 миллиона, лист Excel выходит не более 3 часов.
Когда я проанализировал jstack
, я обнаружил, что существует блокировка, которая создается, пока
XSSFCell cell = row.createCell( colNum );
cell.setCellValue( value );
установка значения в ячейку,
Ниже приведены jstacks
,
java.lang.Thread.State: RUNNABLE
at org.apache.xmlbeans.impl.store.Saver$TextSaver.resize(Saver.java:1700)
at org.apache.xmlbeans.impl.store.Saver$TextSaver.preEmit(Saver.java:1303)
at org.apache.xmlbeans.impl.store.Saver$TextSaver.emit(Saver.java:1190)
at org.apache.xmlbeans.impl.store.Saver$TextSaver.emitElement(Saver.java:962)
at org.apache.xmlbeans.impl.store.Saver.processElement(Saver.java:476)
at org.apache.xmlbeans.impl.store.Saver.process(Saver.java:307)
at org.apache.xmlbeans.impl.store.Saver$TextSaver.saveToString(Saver.java:1864)
at org.apache.xmlbeans.impl.store.Cursor._xmlText(Cursor.java:546)
at org.apache.xmlbeans.impl.store.Cursor.xmlText(Cursor.java:2436)
**- locked <0x000000076354cdc0> (a org.apache.xmlbeans.impl.store.Locale)**
at org.apache.xmlbeans.impl.values.XmlObjectBase.xmlText(XmlObjectBase.java:1500)
at org.apache.poi.xssf.model.SharedStringsTable.getKey(SharedStringsTable.java:134)
at org.apache.poi.xssf.model.SharedStringsTable.addEntry(SharedStringsTable.java:180)
at org.apache.poi.xssf.usermodel.XSSFCell.setCellValue(XSSFCell.java:350)
at org.apache.poi.xssf.usermodel.XSSFCell.setCellValue(XSSFCell.java:320)
Как мы можем справиться с этим.
Пожалуйста, помогите мне решить эту проблему.