Timer任务执行完了,jvm会回收吗,会不会造成内存溢出

Timer 的任务执行完后会不会被回收,要看任务类型。单次任务执行完会从 Timer 的 TaskQueue 中移除,只要没有外部强引用,就可以被 GC 回收。但周期任务执行完会重新放回队列,TimerThread 一直持有它,如果不调用 task.cancel() 或 timer.cancel(),任务对象及其引用的资源都无法回收,长期积累会导致内存泄漏甚至 OOM。而且 TimerThread 默认是非守护线程,不 cancel 会一直存活,持有队列引用。所以生产环境更推荐 ScheduledExecutorService,并注意及时取消任务和关闭调度器。

posted @ 2026-09-23 16:49  ~码铃薯~  阅读(8)  评论(0)    收藏  举报