Java-是否可以对正在执行方法的对象进行垃圾收集?


问题内容

在Java中,我做了很多类似的事情而没有考虑太多:

public class Main {

    public void run() {
        // ...
    }

    public static void main(String[] args) {
        new Main().run();
    }
}

但是,最近我不确定这样做是否安全。毕竟,在Main对象创建之后就没有对它的引用了(嗯,有this引用,但是这个值吗?),所以看起来存在垃圾回收器可能会在执行过程中删除该对象的危险的东西。因此,该main方法应如下所示:

    public static void main(String[] args) {
        Main m = new Main();
        m.run();
    }

现在,我很确定第一个版本可以使用,并且我从未遇到任何问题,但是我想知道在所有情况下这样做是否安全(不仅在特定的JVM中,而且最好根据语言规范对此类情况的说明)。


问题答案:

如果正在执行对象方法,则意味着某人拥有该引用。因此,不,在执行方法时无法对对象进行GC处理。