【发布时间】:2012-12-16 04:59:31
【问题描述】:
在 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 中,而且最好根据语言规范对此类情况的规定)。
【问题讨论】:
-
作为记录,Microsoft CLR 中的等效构造可以在方法仍在执行时收集。见When does an object become eligible for garbage collection?
-
@DanielPryden - 也许这两个问题都在问同一个问题,但这个问题的问法更加清晰,并且比引用的问题产生了更有用的答案。
-
@dj18:同意——这就是我没有投票结束的原因。但是我觉得交叉引用是一个有用的补充,所以我添加了一个评论。
标签: java object garbage-collection main