我遇到了内存不足的错误。我的输入范围很大(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()
,它运行良好。 最佳答案
没有足够的代码来了解发生了什么,主要是PowerSet,但是PowerSet必须计算String数组以返回下一个方法。可能是它坚持了那个对象。
内存问题在runTests方法或PowerSet类中。它不在您发布的代码中。
关于java - Java:垃圾回收,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1675377/