我必须做一个简单的程序来分析大型文本文件并将它们转换为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方法。列表不存储如果这就是你想知道 –