繁体   English   中英

JAVA POI内存不足问题

[英]JAVA POI out of memory issue

我想创建具有500000条记录且几乎没有10列的excel(xlsx)报告。使用jboss 512M和apache poi(3.9)。

JVM由于内存不足错误而崩溃,因为poi用户模型存在内存问题。

因此,我尝试通过提供temp目录将行刷新到磁盘来使用SXSSFWorkbook。 报告已生成,没有任何问题。

  1. 我正在生成关于Web应用程序的报告,其中我正在将Workbbok写到Servlet OP流中。如果由于多个线程共享temp目录,则多个用户试图同时获取报告,这将引起任何问题。

  2. 我也给了调用SXSSFWorkbook的dispose方法来清理临时文件的方法,这是否安全,因为我怀疑它是否应该删除其他线程创建的临时文件(其他用户请求)

  3. 还下面的代码是安全的吗? 由于我在关闭输出流之前但在将工作簿写入输出流之后进行处理。

     workbook.write(out); workbook.dispose(); out.flush(); out.close(); 
  1. 使用File.createTempFile()
  2. 使用File.deleteOnExit()加上

try { /*...*/ } finally { file.delete() }

块。

  1. 觉得很安全。

应该是安全的,因为POI内部使用File.createTempFile() -代码在org.apache.poi.util.TempFile.createTempFile(String, String) 但是,如果您正在运行多个Web应用程序(具有单独的JVM),除非设置了属性poi.keep.tmp.files否则可能会遇到麻烦poifiles在temp目录内名为poifiles的子目录中创建其临时文件,并且尝试在退出时将其删除。 如果其他具有POI的JVM仍在运行,则将导致问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM