【发布时间】:2013-10-29 18:23:06
【问题描述】:
我正在static void main(String[] args) 中处理一个巨大的循环。这个循环处理了一些我想进入 CSV 的数字原语,其中 CSV 中的每一行对应于循环中的一个迭代。
我的目标是动态编写这些原语,以便在每次迭代结束时它们可以被垃圾收集并基本上被遗忘。最糟糕的事情是将这些存储在内存中直到循环结束,因为循环很长。
我已经编写了一个尝试执行此操作的类,粘贴在下面。 问题:CSV 的每一行是否都存储到内存中,然后在循环结束时写入磁盘?如果是这样,我该如何让磁盘写入发生在每次循环迭代以释放内存(最好以快速的方式)?
public static void main(String[] args) throws Exception {
WriteCSV csvWriter = new WriteCSV("src","Hello.csv")
for(int i = 0 ; i < 1000 ; ++i) { //Much bigger in real-world case
csvWriter.writeRow(i);
}
csvWriter.close(); //Does all i between {1,2,...,1000} get GC'd here or dynamically in the above loop???
}
CSV写入类循环动态写入:
class WriteCSV {
private FileWriter fstream;
private BufferedWriter out;
public WriteCSV(String directory, String filename) throws IOException {
File file = new File(directory, filename);
this.fstream = new FileWriter(file);
this.out = new BufferedWriter(this.fstream);
}
public void writeRow(int newRow) throws IOException {
this.out.write(String.valueOf(newRow));
this.out.newLine();
}
public void close() throws IOException {
this.out.close();
}
}
【问题讨论】:
标签: java csv memory-management io garbage-collection