为什么ScheduledExecutorService使用“ New”关键字导致内存泄漏

时间:2018-11-13 19:06:11

标签: java memory memory-leaks heap-memory

当我尝试使用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);

似乎可以释放内存。

为什么第一个代码导致内存泄漏而第二个代码没有泄漏?线程完成执行后,难道不收集所有的内存垃圾吗?

0 个答案:

没有答案