在Apache POI中创建XSSFWorkbook时发生OutOfMemoryError

时间:2019-01-16 16:58:46

标签: java excel spring-boot garbage-collection apache-poi

我有一个spring boot Rest服务,我正在使用它创建Excel文件(xlsm)。在应用程序首次启动时遇到一个奇怪的问题,它将很容易创建一个excel文件,但是再次调用rest端点会生成OutOfMemoryError异常。

false

以下是创建此异常的代码:

    plugins: [
        {
            ptype: 'rowexpander',
            rowBodyTpl: [
                '<div id="MyUniqueId_{MyDataColumn1}"></div>'
            ]
        }
    ]

由于我正在关闭资源,但仍然存在某种原因造成的问题。我在这里阅读了其他已经创建的问题,但似乎没有任何帮助。有解决这个问题的线索吗?

2 个答案:

答案 0 :(得分:0)

excel文件大小是否太大?

如果是,则可能导致此错误,用于通过poi生成和读取大型excel文件的内存使用率很高。

您的try语法正确,资源将始终被关闭。

您可以尝试增加执行jvm的最大内存。 例如,在初始化时使用-Xmx2048m

答案 1 :(得分:0)

代替XSSFWorkbook(将整个Excel工作簿保留在内存中),请尝试使用高效,高性能的流式SXSSFWorkbook类,如下所示:

SXSSFWorkbook workbook = new SXSSFWorkbook(100);

其中100是将保留在内存中并实时处理的默认行数。