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

Amo*_*kar 1 java garbage-collection

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

像这样:

new Sample().instanceMethod();

主要内部.

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

Jon*_*eet 6

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

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

基本上它不值得在错综复杂的角落情况下挂起 - 只是依靠GC收集任何不能再以任何方式到达的对象,而不是收集可能仍在使用的对象.


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