我遇到了内存不足的错误。我的输入范围很大(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/

10-09 05:00