我的情况是这样的:
public void processData(String name,String value) {
/* line 1 */ MyDTO dto = new MyDTO();
/* line 2 */ dto.setName(name);
/* line 3 */ dto.setValue(value);
/* line 4 */ sendThroughJMSChannel(dto);
/* line 5 */ dto = null; //As a best practice, should I do this ?
}
在第4行后,我的节目,我不需要dto
作进一步处理。 作为最佳实践,我应该设置dto
到null
在第5行 ,或者忽略它?
通过将其设定null
,我期待快速的垃圾收集。 这是对的吗?
不,不设置局部变量null
由GC来加速他们的收藏:编译器是足够聪明的数字出来没有你的帮助; 对null
作业只会让你的代码看起来很脏。
非本地人是一个不同的故事:如果你有可能会留周围长于必要的成员变量,这是一个好主意,将其设置为null
,防止磨磨蹭蹭的内存泄漏 。
它会出范围它自的线路4后(一次方法调用结束),所以在此情况下所需的
正如前面已经说过,编译器处于非本地范围足够的局部范围,但再次聪明它是一个很大的背景下具体的。 人们需要了解它是如何合理以抵消在特定点的参考。 使用一个HashMap时说 -
Map<String, Object> entry = new HashMap<String, Object>();
String name = "test";
Object o = new Object();
entry.put(name, o);
o = null;
name = null;
System.gc(); // Nothing is eligible !!! Still referenced by the Map.
Object test = entry.get("test"); // Returns the object.
该条目必须从HashMap中被引用的第一个,在这种情况下被删除。
这是很好的做法,如果你打算在未来的C或C ++代码。