垃圾收集:是否收集对象

时间:2013-01-07 07:41:46

标签: java garbage-collection

  

可能重复:
  Does setting Java objects to null do anything anymore?

我在方法&中一次又一次地使用相同的变量多次将它引用到一个新对象。从垃圾收集方面来看,在引用新对象之前将其置零是一种很好的做法。

示例:

StopWatch watch = new StopWatch();
watch.start();
//some code
watch.stop();
//some code
watch = null;
watch = new StopWatch();
watch.start();
//some code
watch.stop();
//some code

在这种情况下,不确定是否会使GC无效。请指导。

谢谢!

4 个答案:

答案 0 :(得分:7)

此时分配null将没有任何区别,因为您将立即为该变量分配新值。

Java中没有任何关于为变量赋值null的“神奇”。它不会导致对象立即被垃圾收集。它正在做的就是破坏(可能)许多“路径”之一,通过它可以获得有问题的对象。如果路径在下一次GC运行之前自行中断/消失,则分配null无法实现任何目标。

通常,不值得在Java中对变量或字段进行归零,对于局部变量即将被覆盖或即将超出范围而言,当然不值得做。

答案 1 :(得分:2)

不,在这种情况下,无效将不会有任何区别。

如果没有立即将其分配给其他变量,那将会有所不同。在这种情况下,该对象不再等待引用超出范围,而是符合GC的条件。

GC通常会收集那些没有参考的对象。当您指向内存中某些其他对象的引用时,对前一个对象的引用总是丢失。因此,如果您为其指定null,则没有区别。

它可用于垃圾收集提供程序,没有其他参考

答案 2 :(得分:2)

当一个对象可用于垃圾收集时,JVM会为该对象分配空值。

通常,不值得在Java中对变量或字段进行归零,对于局部变量即将被覆盖或即将超出范围而言,当然不值得做。

答案 3 :(得分:1)

由于您在取消

后立即分配新对象,因此不会有任何区别