我正在做一個優化問題,我想在一段固定的時間內用隨機參數執行每個Solver線程(一次一個)。如果任何線程成功找到解決方案,它將返回並且程序將退出。ExecutorService Execptions和內存泄漏?
我在下面的代碼中使用了ExecutorService和Future來幫助我完成此操作。但是,由於某些原因,程序的內存使用量會隨着時間的推移而線性增加,並且在程序變得非常遠之前程序將以OutOfMemory錯誤終止。我的求解器代碼當然不是問題,因爲它沒有靜態變量並且使用恆定的內存量。我想知道是不是因爲我沒有清理線程或正確處理異常,但似乎無法從代碼中找到任何令人震驚的問題。
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