它是一个很好的做法处理后的对象设置为空?(Is it a good practice to set

2019-07-17 15:45发布

我的情况是这样的:

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作进一步处理。 作为最佳实践,我应该设置dtonull第5行 ,或者忽略它?

通过将其设定null ,我期待快速的垃圾收集。 这是对的吗?

Answer 1:

不,不设置局部变量null由GC来加速他们的收藏:编译器是足够聪明的数字出来没有你的帮助; 对null作业只会让你的代码看起来很脏。

非本地人是一个不同的故事:如果你有可能会留周围长于必要的成员变量,这是一个好主意,将其设置为null ,防止磨磨蹭蹭的内存泄漏



Answer 2:

它会出范围它自的线路4后(一次方法调用结束),所以在此情况下所需的



Answer 3:

正如前面已经说过,编译器处于非本地范围足够的局部范围,但再次聪明它是一个很大的背景下具体的。 人们需要了解它是如何合理以抵消在特定点的参考。 使用一个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中被引用的第一个,在这种情况下被删除。



Answer 4:

这是很好的做法,如果你打算在未来的C或C ++代码。



文章来源: Is it a good practice to set an object to null after processing?