【问题标题】:Will a TimerTask in a static method be garbage collected before it executes?静态方法中的 TimerTask 在执行之前会被垃圾收集吗?
【发布时间】:2018-11-22 19:25:33
【问题描述】:

假设我有一个像这样的静态方法:

public static void doSomething() {
    Timer timer = new Timer();
    TimerTask task = new TimerTask() {
        @Override
        public void run() {
            something();
        }
    };
    timer.schedule(task, 1000);
}

当函数返回时,不再引用计时器或任务。在允许任务运行之前,它们是否可能被垃圾收集?如果不是,为什么?

【问题讨论】:

    标签: java android asynchronous


    【解决方案1】:

    您的匿名TimerTask 实例引用了run() 中使用的任何对象。 这意味着如果run() 中使用的所有对象都被GCed,那么TimerTask 实例也可以被GCed。

    您可以在TimerTask 上打开一个调试器,并查看它是否引用了run() 中使用的对象。

    更多信息在这里 Do anonymous classes *always* maintain a reference to their enclosing instance?

    简而言之:GC 不会收集任何仍在使用的对象。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多