我正在使用apache pio 3.14版將某些數據導出爲excel。問題是它使用了大量的內存。使用VisualVM,我注意到oldgen中的數據從大約80M到大約400M的800K導出文件發射並保持在那裏。如果我反覆重複操作,它會不斷增長。看來XSSFWorkbook從未被垃圾收集,並且它保存了excel文件中所有單元格/工作表的引用。 我試過使用SXSSFWorkbook,但內存使用情況類似。 有沒有辦法減少內存使用量?或者我該如何處置XSSFWorkbook。我嘗試關閉工作簿並將其引用爲空,但這不起作用XSSFWorkbook停留在內存中
0
A
回答
0
今天我在我們的應用程序中看到了同樣的問題。所有單元格的工作簿都在舊一代中,並且永遠不會被刪除。爲了分析問題,我創建了一個應用程序,該應用程序創建一個包含10行的工作簿,每行有10個單元格。
然後我試圖代碼移動到一個單獨的線程。
還有一些對象保留在內存中,但工作簿時,片材,行和細胞都沒有了。這是一個簡化的代碼示例,以顯示我如何測試它。
public static void main(String[] args) {
Runnable runnable = new Runnable() {
@Override
public void run() {
Workbook workbook = null;
FileOutputStream fileOutputStream = null;
try {
workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet();
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue("test");
fileOutputStream = new FileOutputStream(new File("/tmp/workbook.xlsx"));
workbook.write(fileOutputStream);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (workbook != null) {
try {
workbook.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fileOutputStream != null) {
try {
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
};
Thread thread = new Thread(runnable);
thread.start();
// Infinite loop to monitor with visualvm
for(;;);
}
+0
你可以添加一些示例代碼來幫助解釋這看起來像什麼嗎? – mjk
相關問題
- 1. 如何釋放XSSFWorkbook擁有的內存?
- 2. 停留在內存中的Asp.net緩存對象
- 3. 創建總是停留在GPU內存中的OpenGL對象
- 4. 全局變量是否總是停留在內存中..?
- 5. 如何讓文本停留在Div內?
- 6. 在內存中保留對象(iPhone SDK)
- 7. 在任務中保留內存離散
- 8. 在python中清除/保留內存
- 9. PHP獲取URL停留在緩存
- 10. Azure Redis緩存停留在創建
- 11. 停留在PHP
- 12. Jersey @Produces Apache XSSFWorkbook
- 13. 瞭解NHibernate的IUserType以及它爲什麼停留在內存中
- 14. 導致線程停留在while循環內時停止?
- 15. 使圖像停留在CSS-懸停內容,當你點擊它
- 16. XSSFWorkbook創建失敗
- 17. 將部分數據保留在內存中並且保留在磁盤中
- 18. Cufon懸停在鼠標停留在hoverstate
- 19. 釋放內存留的UIViewController
- 20. 保留的內存地址?
- 21. YARN保留內存問題
- 22. 新進程駐留在哪裏?在主內存或輔助內存中?
- 23. 爲Python中的列表保留內存?
- 24. 停留在WIX主要升級中保存配置文件!
- 25. 在Eclipse中,AVD停留在Android徽標
- 26. 如何在Scala中保留一個對象在內存中?
- 27. 讓下拉停留在懸停上
- 28. 使用XSSFWorkbook加載8MB電子表格運行到內存不足
- 29. C#Web API - 在內存中高速緩存中存儲並保留數據
- 30. 圖像將留在懸停
如果它很貴,自己動手吧。 – RayanFar
你能提供你的代碼片段嗎? –