可能重复:
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无效。请指导。
谢谢!
答案 0 :(得分:7)
此时分配null
将没有任何区别,因为您将立即为该变量分配新值。
Java中没有任何关于为变量赋值null
的“神奇”。它不会导致对象立即被垃圾收集。它正在做的就是破坏(可能)许多“路径”之一,通过它可以获得有问题的对象。如果路径在下一次GC运行之前自行中断/消失,则分配null
无法实现任何目标。
通常,不值得在Java中对变量或字段进行归零,对于局部变量即将被覆盖或即将超出范围而言,当然不值得做。
答案 1 :(得分:2)
不,在这种情况下,无效将不会有任何区别。
如果没有立即将其分配给其他变量,那将会有所不同。在这种情况下,该对象不再等待引用超出范围,而是符合GC的条件。
GC通常会收集那些没有参考的对象。当您指向内存中某些其他对象的引用时,对前一个对象的引用总是丢失。因此,如果您为其指定null,则没有区别。
它可用于垃圾收集提供程序,没有其他参考
答案 2 :(得分:2)
当一个对象可用于垃圾收集时,JVM会为该对象分配空值。
通常,不值得在Java中对变量或字段进行归零,对于局部变量即将被覆盖或即将超出范围而言,当然不值得做。
答案 3 :(得分:1)
由于您在取消
后立即分配新对象,因此不会有任何区别