如果我有一个Sample类,我有一个实例方法,其中包含instanceMethod。 该类有一个main方法,我在其中创建Sample本身的对象,并在不使用引用变量的情况下调用它的instanceMethod。
像这样:new Sample()。instanceMethod();
在主要内部。
由于此对象没有引用,垃圾收集器是否会收集它?
答案 0 :(得分:6)
在Java 1 中,我不相信在执行instanceMethod()
时可以收集该对象。在main
方法的堆栈框架中,是对对象的引用,至少在逻辑上(JIT编译器可能会忽略它)。您没有将它分配给变量这一事实不会对字节码产生太大影响。
当instanceMethod()
完成时,对象可能有资格进行垃圾回收 - 但可能没有。例如,instanceMethod()
可以在静态变量中存储对this
的引用。
基本上不值得在错综复杂的角落案件中徘徊 - 只是依靠GC收集任何无法再接触到的物品,而不是收集可能仍在使用的物品。
1 在.NET中,当一个实例方法在对象中“执行”时,对象可以仍然被垃圾收集,如果JIT编译器可以证明它没有一个变量将再次被读取。它非常混乱,并且可能导致非常微妙的错误。