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中删除该条目的引用。该条目可能重复