gpt4 book ai didi

java - 使用 SXSSF 写入大 excel 文件时出现内存不足异常

转载 作者:行者123 更新时间:2023-12-04 20:16:26 26 4
gpt4 key购买 nike

我正在使用 SXSSF 编写 100 万条(最坏情况)记录。

以下是我编码的方式。
我必须将记录写入已经存在的 Excel 模板。这个
模板是
在类路径中可用。我将把这个模板复制到一个普通的
地点。使用 XSSFWorkBook 加载此文件。
SXSSFWorkbook 使用 XSSFWorkBook 和窗口大小(-1)初始化为
范围。

当记录数达到 100 的倍数时,我将刷新工作表。

Pseudo Code:
if(count % 100 == 0){
((SXSSFSheet)sheet).flush(100); //keeps only 100 rows in memory
}

但是在执行此操作时,堆内存逐渐增加并结束
出现内存不足异常。我的机器的最大堆内存大小是
大约 1.5 GB。实际服务器中的堆内存可能很大。但我很担心,因为应用程序有多个线程,它们都会创建大的 excel 文件。

这是预期的行为吗? IE。预计会超过 1.5 GB,而
写大小的记录〜100万?但正如 POI 文档中给出的那样,SXSSF 不应该在将行刷新到磁盘时耗尽内存。

最佳答案

现在解决了:)。
它与 SXSSFWorkbook 无关。
报告中的一个特定列(表示报告中的错误)需要为红色。所以我将 Style 应用于该列。
我没有在 FOR 循环之外创建样式并将其应用于列下的所有单元格,而是在每次编写错误时创建一个样式。
在 100 万条记录中,如果 1/2 百万有错误,我的代码将生成 1/2 百万 CellStyles。那是在吃我的堆内存。

以下链接帮助我解决了它。
http://poi.apache.org/faq.html#faq-N100EF

关于java - 使用 SXSSF 写入大 excel 文件时出现内存不足异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24057120/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com