我正在做一个优化问题,我想在固定的时间段内使用随机参数执行每个 Solver 线程(一次一个)。如果任何线程成功找到解决方案,它将返回并且程序将退出。
我在下面的代码中使用了 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();
}
}
}