2017-07-24 206 views
0

我有一个以XLSM格式启用宏的Excel文件。在这个excel里面,有2-3个依赖下拉列表。我写了一个宏代码来停止删除特定的列。java.lang.OutOfMemoryError:超出GC开销限制通过Apache POI启用Excel启用Excel表单时发生错误

我使用下面的代码上传这个excel。

XSSFWorkbook workbook = new XSSFWorkbook(new 
 
      FileInputStream(fileName)); 
 
      XSSFSheet sheet = workbook.getSheetAt(1); 
 
      XSSFRow row; 
 
      XSSFCell cell; 
 
      int rows = sheet.getPhysicalNumberOfRows();

但它给人一种错误:

java.lang.OutOfMemoryError: GC overhead limit exceeded 
 
\t com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl.getNodeObject 
 
    (DeferredDocumentImpl.java:972) 
 
\t com.sun.org.apache.xerces.internal.dom.DeferredElementNSImpl.synchronizeD 
 
    ata(DeferredElementNSImpl.java:126) 
 
\t com.sun.org.apache.xerces.internal.dom.ElementNSImpl.getNamespaceURI(Elem 
 
    entNSImpl.java:250)

虽然没有上载的宏,没有错误和工作的罚款。

回答

0

java.lang.OutOfMemoryError:超出GC开销限制:当GC无法在连续周期中释放对象时出现此错误。您可以在vm启动参数中指定限制。

这意味着与您的引用beocme强大的宏,不符合GC。在没有宏的情况下,相同的对象有资格使用GC。

您需要了解为什么在添加宏时,引用变得可以访问。

+0

那么,我现在应该怎么做? –

+1

由于您正在使用宏来停止/删除特定的列,因此您要保持对象的强壮性。在apache poi中获取GC开销是一个常见错误。一些解决方案:https://stackoverflow.com/questions/36389920/java-apache-poi-memory-leak-with-excel-files –

相关问题