java - 将大行写入文件

标签 java postgresql memory-leaks resultset printwriter

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

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

 writer.close();

最佳答案

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

如果您想要扩展,请以线程方式进行。让一个线程(生产者)从 ResultSet 读取行,另一个线程(消费者)将行写入文件。像 ArrayBlockingQueue 这样的东西非常适合这个。如果消费者跟不上生产者,就开始阻塞,等待消费者追上。这种方法占用的内存更少,速度更快,因为您的 IO 是并行完成的。

关于java - 将大行写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24314578/

相关文章:

java - 在@test 方法中处理其中一行失败时数据提供者的行为

java - 将抽象类存储在数组列表中

C++ - 使用 _CrtDumpMemoryLeaks() 进行内存泄漏测试 - 不输出行号

java - String 类中的 substring 方法导致内存泄漏

c++ - 类定义中涉及私有(private)unique_ptr时C++中的引用初始化

c# - Soundex 算法的一些变化

java - Jsoup 获取具有 CDATA 标签的 javascript 内容?

postgresql - 任何事后分析锁的方法?

postgresql - 容器化数据库文件路径和根目录未知

python - Django 2.1+ 批量更新记录及其相关记录的数量?