单例类中实例的垃圾收集

时间:2013-12-05 20:38:03

标签: garbage-collection singleton

我有一个单例类,其实例在我的应用程序的整个生命周期中都是活着的。从一个singelton实例方法我创建一个Runnable线程的实例并执行它。可运行的线程实例在执行后是否会成为垃圾收集的候选者,还是会永远保留在堆中,因为我的单例实例总是处于活动状态?

例如:在下面的示例中,每次调用MySingleton.getInstance()。runMyThread()时,我都会创建一个新的MyRunnable类实例。一旦run()方法完全执行并完成后,这些MyRunnable实例是否会被考虑用于垃圾收集?

public class MySingleton
{
    private MySingleton instance = null;

    private MySingleton() {}

    public static MySingleton getInstance()
    {
        if(instance == null)
        {
            instance = new MySingleton();
        }
    }  

    public void runMyThread()
    {
        Thread thread = new Thread(new MyRunnable()); //MyRunnable implements Runnable
        thread.start();
    }
}

1 个答案:

答案 0 :(得分:1)

通常,对象将成为垃圾收集的候选对象 它已不在范围 没有引用它

在这种情况下,假设在完成执行后没有任何内容引用Thread对象,它将成为垃圾收集的候选对象。在您的示例中,您的单例实例不包含对Thread对象的任何引用 - 它调用runMyThread(),它创建一个新的Thread对象并启动它。 Thread对象的作用域包含在runMyThread()方法中。