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

Sur*_*nga 12 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; //As a best practice, should I do this ?

}
Run Code Online (Sandbox Code Playgroud)

第4行之后的程序中,我不需要dto进一步处理.作为最佳实践,我应该设置dtonull第5行,或者忽略它?

通过设置它null,我期待快速垃圾收集.这是对的吗?

das*_*ght 26

不,不要设置局部变量来null加速GC的收集:编译器足够聪明,可以在没有你帮助的情况下解决它; 该null任务只会让你的代码看起来很脏.

非本地人是一个不同的故事:如果你有一个成员变量可能会保持超过必要的时间,最好将其设置为null并防止lingerer内存泄漏.


Jig*_*shi 13

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