簡體   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