使用apache poi阅读excel文件时出现exception

我正在阅读两个有97000行合并的Excel表。 当我在eclipse上运行程序时,我得到这个exception。 它卡在92865行。 代码中存在一些问题,或者是内存configuration问题。 iteratormaster是第二个工作簿的迭代器。 stringSet是一个哈希集合。 当我增加堆大小时它运行正常。 当我创build一个jar并将其分发到其他机器上时,这是行不通的。 任何永久解决scheme

while (iteratormaster.hasNext()){ //jLabel5.setText("Processing record "+qw+" out of"+ total+ " "+ "(" + (qw/total)*100+"%"); Row rowmaster = iteratormaster.next(); int qw1= rowmaster.getRowNum(); if (qw1%1500==0){ //jProgressBar1.setValue(((qw+n)/total)*100); // Thread.sleep(500); jLabel11.setText("Processing record "+(qw1+n)+" out of "+ total); jLabel11.paintImmediately(jLabel11.getVisibleRect()); } Cell media1 = rowmaster.getCell(5,Row.CREATE_NULL_AS_BLANK); String gandu=media1.toString(); b.add(gandu); //sorted.add(gandu); Cell cellmaster0 = rowmaster.getCell(4,Row.CREATE_NULL_AS_BLANK); if (stringSet.contains((cellmaster0).toString())) { rowindexa++; cellindexa=-1; Row rowa=sheeta.createRow(rowindexa); //Iterator<Cell> cellmaster = rowmaster.iterator(); for (int cn=0;cn<rowmaster.getLastCellNum();cn++){ cellindexa++; Cell cellmaster1= rowmaster.getCell(cn, Row.CREATE_NULL_AS_BLANK); String aap = cellmaster1.toString(); Cell cella =rowa.createCell(cellindexa); cella.setCellValue(aap); if (aap.indexOf("\t")!=-1){ System.out.println(aap);} } } else { rowindextemp++; cellindextemp=-1; Row rowb=sheettemp.createRow(rowindextemp); //Iterator<Cell> celltemp1 = rowmaster.cellIterator(); for (int cn1=0;cn1<rowmaster.getLastCellNum();cn1++){ cellindextemp++; Cell celltemp2 = rowmaster.getCell(cn1,Row.CREATE_NULL_AS_BLANK); String congress=celltemp2.toString(); Cell cellb = rowb.createCell(cellindextemp); cellb.setCellValue(congress); } } } Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: GC overhead limit exceeded at org.apache.xmlbeans.impl.store.Saver$TextSaver.resize(Saver.java:1592) at org.apache.xmlbeans.impl.store.Saver$TextSaver.preEmit(Saver.java:1223) at org.apache.xmlbeans.impl.store.Saver$TextSaver.emit(Saver.java:1144) at org.apache.xmlbeans.impl.store.Saver$TextSaver.emitElement(Saver.java:926) at org.apache.xmlbeans.impl.store.Saver.processElement(Saver.java:456) at org.apache.xmlbeans.impl.store.Saver.process(Saver.java:307) at org.apache.xmlbeans.impl.store.Saver$TextSaver.saveToString(Saver.java:1727) at org.apache.xmlbeans.impl.store.Cursor._xmlText(Cursor.java:546) at org.apache.xmlbeans.impl.store.Cursor.xmlText(Cursor.java:2436) at org.apache.xmlbeans.impl.values.XmlObjectBase.xmlText(XmlObjectBase.java:1455) at org.apache.poi.xssf.model.SharedStringsTable.getKey(SharedStringsTable.java:130) at org.apache.poi.xssf.model.SharedStringsTable.addEntry(SharedStringsTable.java:176) at org.apache.poi.xssf.usermodel.XSSFCell.setCellValue(XSSFCell.java:350) at org.apache.poi.xssf.usermodel.XSSFCell.setCellValue(XSSFCell.java:320) at defg.jButton4ActionPerformed(defg.java:1068) at defg.access$9(defg.java:942) at defg$9.actionPerformed(defg.java:539) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at java.awt.Component.processMouseEvent(Component.java:6505) at javax.swing.JComponent.processMouseEvent(JComponent.java:3320) at java.awt.Component.processEvent(Component.java:6270) at java.awt.Container.processEvent(Container.java:2229) at java.awt.Component.dispatchEventImpl(Component.java:4861) at java.awt.Container.dispatchEventImpl(Container.java:2287) 

尝试增加你的项目的内存 –

在Eclipse中 – 右键单击​​项目>运行方式>运行configuration>参数选项卡> VM参数部分>添加-Xms512M -Xmx1024M或>应用