java - 为什么 ScheduledExecutorService 使用“新”关键字导致内存泄漏
问题描述
当我尝试使用 aScheduledExecutorService
执行以下代码时:
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);
似乎释放内存就好了。
为什么第一个代码会导致内存泄漏而第二个不会?线程完成执行后,不是所有的内存垃圾都被收集了吗?
解决方案
推荐阅读
- react-testing-library - 如何使用 React 测试库从选择列表中选择一个选项
- reactjs - 宽高参数代表什么@react-pdf-highlighter
- javascript - 鼠标悬停时子菜单消失
- django - 如何将 django 中的子应用添加到 INSTALLED_APPS?
- angular - 如何在我的垫子步进器中隐藏垫子步进器标题?
- python - 特定字符模式 Python
- c++ - 如何遍历所有 ASCII 字符?
- spring-boot - 如何从 kotlin 中的 spring application.yaml 获取变量
- python - discord.py 'VoiceClient' 对象没有属性 'create_ytdl_player'
- javascript - 部署/生产时无法连接到 MongoDB