【发布时间】:2010-12-13 02:53:51
【问题描述】:
我遇到了内存不足错误。我有很大范围的输入(2^40),太大而无法一次保存。每个输入都是一个String[]。
相反,我认为我会在每个输入上运行我的测试程序,将结果写入文件,然后丢弃输入。最长输入的length 是42,所以这不是导致溢出的错误。我不认为我了解垃圾收集。
PowerSet 就像一个惰性列表 - 在调用 .next() 之前不会计算结果。每个结果返回baseSet 的一个子集。
baseSet 是一个长度为 40 的 String[]。
runTests 对输入进行一些分析并将其写入文件。
PowerSet argSetSet = powerset(baseSet);
while (argSetSet.hasNext()) {
runTests(argSetSet.next()); //saves output to file
}
这会导致内存不足错误。但是我没有将 argSetSet.next() 的结果保存在任何地方,那么为什么会发生这种情况呢?我不需要存储来自next() 或runTests() 的任何数据。如何确保所有内容都被垃圾回收?
如果我注释掉runTests(),它运行良好。
【问题讨论】:
-
确切的错误信息是什么?是
OutOfMemoryError,表示对象太多?或者*Error,这表明存在递归错误?
标签: java memory-management garbage-collection heap-memory