将大行写入文件

时间:2014-06-19 19:14:22

标签: java postgresql memory-leaks resultset printwriter

我有一个巨大的结果集,包括,比方说,100万行。我通常使用以下代码片段将它们写入文件,而我总是内存不足。有没有有效的方法来消除这个问题?

 PrintWriter writer = new PrintWriter(filename, "UTF-8");
 iteration -> { writer.println(a single string); }

 writer.close();

1 个答案:

答案 0 :(得分:1)

既然你说过ResultSet,我认为它来自数据库?首先,使用流式结果集。 MySQL的JDBC驱动程序喜欢在内存中缓冲所有行,而对于1M(或1B)行,这可能是一个问题。

如果要缩放,请以线程方式进行。让一个线程(生产者)从ResultSet读取行,而另一个线程(消费者)将行写入文件。像ArrayBlockingQueue这样的东西对此非常有用。如果消费者无法跟上生产者的步伐,就开始阻止,并等待消费者赶上。由于您的IO是并行完成的,因此这种方法占用的内存更少,速度更快。