Java 处理后将对象设置为null是否是一种好的做法?

Java 处理后将对象设置为null是否是一种好的做法?,java,garbage-collection,Java,Garbage Collection,我有这样的场景: 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; /

我有这样的场景:

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
进行进一步处理。作为最佳实践,我应该将第5行中的
dto
设置为
null
,还是忽略它


通过将其设置为
null
,我期望垃圾收集速度更快。它是否正确?

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

不,不要将局部变量设置为
null
,以加速GC收集它们:编译器足够聪明,可以在没有您帮助的情况下找到它;
null
赋值只会使代码看起来脏兮兮的


非局部变量则是另一回事:如果您有一个成员变量可能停留的时间超过了需要的时间,那么最好将其设置为
null
,以防止延迟内存泄漏。

正如前面所说,编译器对于局部范围来说足够智能,但对于非局部范围来说,它更特定于上下文。人们需要理解在某个特定点取消引用是多么合法。使用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.
Map entry=newhashmap();
String name=“test”;
对象o=新对象();
输入。输入(名称,o);
o=零;
name=null;
System.gc();//没有什么是合格的!!!仍然被地图引用。
对象测试=entry.get(“测试”);//返回对象。
在这种情况下,必须首先从HashMap中删除该条目的引用。

该条目可能重复