3

可能重复:
将 Java 对象设置为 null 有什么作用吗?

我在一个方法中一次又一次地使用同一个变量并多次将其引用到一个新对象。从垃圾收集方面来说,在使其引用一个新对象之前将其无效是一种好习惯吗?

例子:

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

4 回答 4

7

在那一点分配null不会有任何区别,因为您将立即为该变量分配一个新值。

null在 Java 中,分配给变量并没有什么“神奇”之处。它不会导致对象立即被垃圾收集。它所做的只是打破(可能)许多“路径”之一,通过这些“路径”可以访问相关对象。如果在下一次 GC 运行之前路径会自行中断/消失,那么分配将null一无所获。

通常,在 Java 中将变量或字段置空是不值得的,对于即将被覆盖或即将超出范围的局部变量,当然也不值得这样做。

于 2013-01-07T07:44:12.327 回答
2

不,在这种情况下,取消不会有任何区别。

如果没有立即将其分配给其他变量,那将会有所不同。在这种情况下,不是等待引用超出范围,而是对象将有资格进行 GC。

GC 通常会收集那些没有引用的对象。当您将引用指向内存中的某个其他对象时,对前一个对象的引用无论如何都会丢失。因此,是否将 null 分配给它没有区别。

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

于 2013-01-07T07:52:21.517 回答
2

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

通常,在 Java 中将变量或字段置空是不值得的,对于即将被覆盖或即将超出范围的局部变量,当然也不值得这样做。

于 2013-01-07T09:39:50.937 回答
1

它不会有任何区别,因为您在取消后立即分配一个新对象

于 2013-01-07T07:43:45.117 回答