Я занимаюсь проблемой оптимизации, в которой я хочу выполнить каждый поток Solver (по одному за раз) со случайными параметрами в течение фиксированного периода времени. Если какой-либо из потоков успешно найдет решение, он вернется и программа выйдет.ExecutorService Execptions и утечка памяти?
У меня есть код ниже, где я использовал ExecutorService и Future, чтобы помочь мне в этом. Однако по некоторым причинам использование памяти в программе увеличивается с течением времени, и программа заканчивается с ошибкой OutOfMemory до того, как она будет очень далеко. Мой код Solver, безусловно, не является проблемой, поскольку он не имеет статических переменных и использует постоянный объем памяти. Мне интересно, не потому ли, что я не очищаю потоки или неправильно обрабатываю исключения, но я не могу найти какую-либо вопиющую проблему из кода.
public class RandomizedSolver {
public static void main(String[] args) {
try {
for (int i = 0; i < 300; i++) {
ExecutorService executor = Executors.newSingleThreadExecutor();
try {
System.out.println("Starting new thread");
Future<Void> future = executor.submit(new Solver(args));
future.get(1, TimeUnit.SECONDS);
executor.shutdownNow();
break;
} catch (TimeoutException e) {
System.out.println("Thread timeout.");
executor.shutdownNow();
continue;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Что такое класс 'Solver'? – Andremoniy