我必須做一個簡單的程序來分析大型文本文件並將它們轉換爲excel文件。我的代碼是功能性的,但我的程序的內存使用情況有問題。在Java中重複包含循環n次的函數
想象一個包含一些消息的文件,其中1行等於1消息。我的程序基本上將信息分割成幾部分。 例如:
比方說,我的消息是這樣的: {{1:FOO} {2:BAR} {3:一些文字} ... {N:最後INFO}}
一旦我讀完這一行,我將下列信息(「FOO」,「BAR」,「更多文本」,...,「最後的信息」)放入列表中,然後我調用我的函數insertLineIntoExcelSheet(List infos)將數據插入到我的excel文件中的一行中。
我已經調試我的程序,我已經想通了,內存問題來自 以下功能:
public void insertLineIntoExcelSheet(List<String> line){
Row row = sheet.createRow(nbRows++);
int colNum = 0;
for (String field : line) {
Cell cell = row.createCell(colNum++);
cell.setCellValue((String) field);
}
}
的問題是,當我有信息量大(N例如)在我的文本文件中,前一個函數被調用n次,結果是JVM需要大量內存(〜1GB的RAM)(當我在我的代碼中註釋這個函數時,jvm只需要〜150MB的RAM) 。 那麼,有沒有辦法來優化這個功能?
P.S:我正在使用Apache POI來創建我的excel文件並向其中添加行/單元格。
在此先感謝
'insertLineIntoExcelSheet'中消耗的唯一內存似乎是由不斷增長的Excel工作表佔用的。沒有得到解決。但是,該方法的調用者對所有傳入的列表進行了哪些操作?它是否永遠保持着它們? –
請閱讀https://poi.apache.org/spreadsheet/how-to.html#sxssf –
@KevinAnderson調用方法只是創建列表,然後調用參數中的列表的insertLineIntoExcelSheet方法。列表不存儲如果這就是你想知道 –