Java 当我使用close()方法时,垃圾收集器是否可以删除对象?

Java 当我使用close()方法时,垃圾收集器是否可以删除对象?,java,garbage-collection,Java,Garbage Collection,如果我有一个scanner对象,并使用close()方法,那么在这一行之后,它会成为垃圾收集器的可删除对象吗? 或者只有当我写“scanner=null;”时它才是可删除的 如果我在程序的任何部分都没有将对象设置为null(扫描器或非扫描器),我可以说它在程序结束时对于垃圾收集器是可删除的吗?还是垃圾收集器永远无法使用它?close()调用close()方法的实现,只是它与GC无关, 只有当不存在活动引用时,对象才有资格进行收集对象才有资格进行垃圾收集,如果无法从任何活动线程或任何静态引用访问该

如果我有一个scanner对象,并使用close()方法,那么在这一行之后,它会成为垃圾收集器的可删除对象吗? 或者只有当我写“scanner=null;”时它才是可删除的

如果我在程序的任何部分都没有将对象设置为null(扫描器或非扫描器),我可以说它在程序结束时对于垃圾收集器是可删除的吗?还是垃圾收集器永远无法使用它?

close()
调用
close()
方法的实现,只是它与GC无关,
只有当不存在活动引用时,对象才有资格进行收集

对象才有资格进行垃圾收集,如果无法从任何活动线程或任何静态引用访问该对象,换句话说,如果对象的所有引用都为null,则可以说该对象符合垃圾收集的条件。

如果在方法内部为scanner对象使用局部变量,并且未将该变量分配给范围更广的任何其他对象,然后,当您退出包含此局部变量的方法时,对象有资格进行垃圾收集。

正如许多人所说,调用
close()
不会使对象有资格进行垃圾收集。顺便说一句,它可能会关闭或取消引用一些内部对象,因此它们将符合GC的条件。顺便说一句,在处理IO时,调用
close()
可以释放一些操作系统句柄(和昂贵的资源),这通常比GC调用单个对象更重要。

当不再有对对象的任何引用时,对象就有资格使用GC。(顾名思义,在程序的末尾不再有任何引用。)@HotLicks我想你的意思是“当不再有任何可访问的引用时”。两个对象可以相互引用,但仍然可以进行垃圾收集。@DavidWallace-True。我给出了缩写版本。引用必须是可访问的且必须是强引用。“其所有引用均为null”没有意义。如果它们为空,则它们不是“它的引用”。