处理后将对象设置为null是一个好习惯吗?

我有这样的场景:

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并防止lingerer内存泄漏

在第4行(一旦方法调用结束)之后,它将超出范围,因此在这种情况下不需要

正如已经说过的那样,编译器对于本地范围足够聪明,但在非本地范围内,它更具有上下文特性。 人们需要理解在特定点取消引用的合法性。 说使用HashMap时 –

 Map entry = new HashMap(); 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 ++编码,那么这是一种很好的做法。