当我尝试使用ScheduledExecutorService
执行以下代码时:
ScheduledExecutorService scheduledExecutor = Executors.newScheduledThreadPool(1);
scheduledExecutor.scheduleAtFixedRate(new TaskA(), 0, 1800, TimeUnit.SECONDS);
这会导致内存泄漏(内存使用量不断增长,因此在12小时之内,我在机器上使用90%以上的内存(由于缺少内存,最终会导致Eclipse崩溃),即使程序仅使用了大约50 1-2次运行后的内存百分比)
但是,当我将其更改为:
ScheduledExecutorService scheduledExecutor = Executors.newScheduledThreadPool(1);
final TaskA taskA = new TaskA();
scheduledExecutor.scheduleAtFixedRate(taskA, 0, 1800, TimeUnit.SECONDS);
似乎可以释放内存。
为什么第一个代码导致内存泄漏而第二个代码没有泄漏?线程完成执行后,难道不收集所有的内存垃圾吗?