で巨大なループを扱ってい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();
}
}