作为Java程序入口点的对象是否被垃圾收集?

时间:2012-01-02 10:29:05

标签: java garbage-collection

如果我有一个Sample类,我有一个实例方法,其中包含instanceMethod。 该类有一个main方法,我在其中创建Sample本身的对象,并在不使用引用变量的情况下调用它的instanceMethod。

像这样:

new Sample()。instanceMethod();

在主要内部。

由于此对象没有引用,垃圾收集器是否会收集它?

1 个答案:

答案 0 :(得分:6)

在Java 1 中,我不相信在执行instanceMethod()时可以收集该对象。在main方法的堆栈框架中,对对象的引用,至少在逻辑上(JIT编译器可能会忽略它)。您没有将它分配给变量这一事实不会对字节码产生太大影响。

instanceMethod()完成时,对象可能有资格进行垃圾回收 - 但可能没有。例如,instanceMethod()可以在静态变量中存储对this的引用。

基本上不值得在错综复杂的角落案件中徘徊 - 只是依靠GC收集任何无法再接触到的物品,而不是收集可能仍在使用的物品。


1 在.NET中,当一个实例方法在对象中“执行”时,对象可以仍然被垃圾收集,如果JIT编译器可以证明它没有一个变量将再次被读取。它非常混乱,并且可能导致非常微妙的错误。