我的內存不足錯誤。我有一個大範圍的輸入(2^40),這是太大,不能立即舉行。每個輸入是一個String[]
。相反,我想我會在每個輸入上運行測試程序,將結果寫入文件,然後丟棄輸入。最長輸入的length
是42,所以這不是導致溢出的錯誤。我不認爲我理解垃圾收集。Java:垃圾回收
PowerSet
就像是一個懶惰的列表 - 直到調用.next()
纔算出結果。每個結果返回baseSet
的一個子集。 baseSet
是長度爲40的字符串[]。 runTests
對輸入進行了一些分析並將其寫入文件。
PowerSet argSetSet = powerset(baseSet);
while (argSetSet.hasNext()) {
runTests(argSetSet.next()); //saves output to file
}
這會導致內存不足錯誤。但是我沒有將argSetSet.next()的結果保存在任何地方,那麼爲什麼會發生這種情況呢?我不需要存儲來自next()
或runTests()
的任何數據。我如何確保它們都被垃圾收集?
如果我註釋掉runTests()
,它運行良好。
什麼是確切的錯誤信息?它是一個'OutOfMemoryError',它表明太多的對象?或者是一個'StackOverflowError',它提示了一個遞歸錯誤? – McDowell 2009-11-04 17:30:19
錯誤是'OutOfMemory' – 2009-11-04 20:46:12