[英]JAVA POI out of memory issue
我想创建具有500000条记录且几乎没有10列的excel(xlsx)报告。使用jboss 512M和apache poi(3.9)。
JVM由于内存不足错误而崩溃,因为poi用户模型存在内存问题。
因此,我尝试通过提供temp目录将行刷新到磁盘来使用SXSSFWorkbook。 报告已生成,没有任何问题。
我正在生成关于Web应用程序的报告,其中我正在将Workbbok写到Servlet OP流中。如果由于多个线程共享temp目录,则多个用户试图同时获取报告,这将引起任何问题。
我也给了调用SXSSFWorkbook的dispose方法来清理临时文件的方法,这是否安全,因为我怀疑它是否应该删除其他线程创建的临时文件(其他用户请求)
还下面的代码是安全的吗? 由于我在关闭输出流之前但在将工作簿写入输出流之后进行处理。
workbook.write(out); workbook.dispose(); out.flush(); out.close();
try { /*...*/ } finally { file.delete() }
块。
应该是安全的,因为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.