У меня ошибка памяти. У меня большой диапазон входов (2^40), который слишком велик, чтобы удерживать его сразу. Каждый вход - String[]
.Java: сбор мусора
Вместо этого я решил запустить программу тестирования на каждом входе, записать результаты в файл, а затем отбросить входные данные. length
самого длинного входа - 42, так что это не ошибка, вызывающая переполнение. Я не думаю, что понимаю сбор мусора.
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
ошибка 'OutOfMemory' –