【问题标题】:BufferedReader with FileReader uses a lot of RAM带有 FileReader 的 BufferedReader 使用大量 RAM
【发布时间】:2023-04-01 04:00:02
【问题描述】:

我在非常大的文件(~100g)上使用BufferedReaderFileReader

这是我正在使用的代码:

BufferedReader reader = new BufferedReader(new FileReader("file path"));
BufferedWriter writer = new BufferedWriter(new FileWriter("output file"));
String line;
while ((line = reader.readLine()) != null) {
    // check if i need this line, and if i need it, i print it
    writer.write(line);
    writer.newLine();
}
writer.close();
reader.close();

当我一开始在我的文件上运行它时,它使用的内存量很少,但使用的内存会慢慢增长(很容易使用超过 50GB 的 RAM)。

为什么会这样?而且,我能以某种方式解决它吗?

【问题讨论】:

  • 你对这些线条做了什么?
  • @JonSkeet 我更新了我的问题。我取每一行并按制表符拆分(我的文件是制表符分隔的),并检查我是否需要这一行,然后使用 BufferedWriter 将其打印到输出文件中。
  • 你没有保存任何部分?如果您可以在此处提供minimal reproducible example 会有所帮助,以便我们可以尝试重现它。 (以及对文件中内容的粗略了解,因此我们可以生成类似的内容。)
  • 50g 内存?你在那里配置了多少堆?您所说的“已用内存”到底是什么意思?
  • 不要在您的问题中编辑答案/解决方案,而是创建一个答案帖子。然后不要在标题中写“已解决”,而是接受解决您问题的答案。并解释您如何使用-Xmx 参数。可能传递的值设置不正确。

标签: java bufferedreader filereader


【解决方案1】:

我看到当我从命令行使用-Xmx 参数在 linux 上运行 java 程序时,由于某种原因它使我的 java 程序需要大量 RAM。

从我删除-Xmx参数开始,java程序使用低内存。


这是我的旧命令:

java -Xmx350g -jar MyJar.jar

这是我的新命令:

java -jar MyJar.jar

【讨论】:

  • 我不知道它甚至可以分配 350g 给 JVM ......另外,也许垃圾收集器只有在占用一定百分比的空间后才启动?..
  • @Asoub 我在强大的服务器上运行它,所以当你有 512g 的 RAM 时,分配 350g 应该不是问题。而且我认为您对垃圾收集器的看法可能是对的,但我真的不知道。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-22
  • 2016-07-15
  • 1970-01-01
  • 1970-01-01
  • 2014-09-24
  • 2018-08-04
  • 1970-01-01
相关资源
最近更新 更多