【发布时间】:2014-06-12 04:17:37
【问题描述】:
我正在使用 StringBuilder,读取文件的每条推文并在将其过滤到另一个文件后将其写入。我还在每个循环结束时刷新我的 StringBuilder。我在 2012 年中期使用 8GB RAM mac 视网膜。
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2367)
at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:130)
at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:114)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:535)
at java.lang.StringBuffer.append(StringBuffer.java:322)
at java.io.BufferedReader.readLine(BufferedReader.java:363)
at java.io.BufferedReader.readLine(BufferedReader.java:382)
at Parser.main(Parser.java:52)
【问题讨论】:
-
发布代码。看起来你真的没有刷新你的
StringBuffer。对于 5 GB,您可能暂时需要三倍的容量:将近 5 GB 的缓冲区可以调整为 10 GB,因此它是 15 GB(假设增长因子为 2)。 -
检查此线程以分配更多内存stackoverflow.com/questions/2610194/…
-
代码已经贴出来了。
-
您将内容存储在内存中的 LinkedHashSet 中,而无需从中删除任何内容。这可能就是内存问题的来源。
-
好的,那你有什么建议呢?我不认为这是问题所在,我正在尝试使用文档中的基本文件阅读器代码,甚至似乎不适用于 5gb 文件。
标签: java