簡體   English   中英

處理后將對象設置為null是一個好習慣嗎?

[英]Is it a good practice to set an object to null after processing?

我有這樣的場景:

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<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中引用該條目。

如果您計划將來使用C或C ++編碼,那么這是一種很好的做法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM