gpt4 book ai didi

Java 长时间运行的计时器正在被 GC 使用

转载 作者:行者123 更新时间:2023-12-04 20:40:26 24 4
gpt4 key购买 nike

我有一个 java.util.Timer,我正在安排每 24 小时在凌晨 3:00:00 运行一次的 TimerTasks,但是在 5-8 天后,GC 消耗了 Timer,我的所有任务都被取消了,因为计时器实例不再存在。

我怎样才能避免这种情况?

我使用:

t.schedule(timerTask, date);

然后任务又开始了(当任务被执行时也调用了再次调度这个任务的方法)

定时器是这样定义的:

public static Timer t = new java.util.Timer();

最佳答案

如果定时器是这样声明和创建的:

    public static Timer t = new java.util.Timer();

那么我认为Timer可以被垃圾回收的场景只有两种:

  1. 在您的应用程序的某处,某些东西正在为 t 分配一个新值,导致以前的值变得无法访问。

  2. 包含 t 声明的类已变得不可访问并已被卸载。

到目前为止,第一种情况最有可能发生,并且有一种简单的方法可以避免这种情况。将声明更改为:

   public static final Timer t = new java.util.Timer();

第二种情况只有在您的应用程序(或者可能是它正在使用的框架)使用本身变得无法访问的类加载器动态加载类时才合理。

关于Java 长时间运行的计时器正在被 GC 使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33959472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com