我有一个java.util.Timer,我正在调度TimerTasks,它每24小时在凌晨3:00运行一次,但是5-8天之后,GC消耗了计时器,因为计时器实例不再存在,所以我的所有任务都被取消了。
我怎么才能阻止这一切?
我用:
t.schedule(timerTask, date);
然后任务本身再次启动(当任务被执行时,也调用再次调度此任务的方法)
定时器的定义如下:
public static Timer t = new java.util.Timer();
发布于 2015-11-27 14:34:16
static
变量是定义它们的class
的一部分,并在加载类时进行初始化。GC可能会在某个时候决定卸载不再需要的类(特别是当内存较低,挂起的操作需要更多内存时)。这就是你在这里可能会发生的事。您可以尝试将Timer
对象创建为类的非静态成员,该类的实例仍由GC引用。
https://stackoverflow.com/questions/33959472
复制相似问题