2013-01-07 56 views
3

可能重複:
Does setting Java objects to null do anything anymore?垃圾收集:將對象收集

,我一次又一次地使用同一個變量的方法&它指的是一個新的對象,在許多一個時間..從垃圾收集方面來看,它是一個很好的做法,使其在使其引用新對象之前將其廢除。

例子:

StopWatch watch = new StopWatch(); 
watch.start(); 
//some code 
watch.stop(); 
//some code 
watch = null; 
watch = new StopWatch(); 
watch.start(); 
//some code 
watch.stop(); 
//some code 

不知道是否抵消使其在這種情況下GC的差異。請指導。

謝謝!

+0

應該沒有什麼區別 –

+2

如果僅僅爲了標記它而使GC將其刪除,那麼將變量設置爲null幾乎沒有用。如果你新建了另一個對象並將其存儲在.ame變量中,那麼當GC感覺到它時,將收集前一個對象。所以這個代碼。上面的工作正常,即使沒有設置null。 – bas

回答

7

在這一點上分配null將沒有什麼區別後分配一個新的對象,因爲你馬上要分配一個新值變量。

Java中沒有什麼「魔法」將null分配給變量。它不會立即將垃圾收集起來。它所做的只是破壞可能存在的對象之一(可能)許多「路徑」。如果在下次GC運行之前路徑會自行破壞/消失,則分配null不會實現任何效果。

正常情況下,它不值得在Java中置空變量或字段,並且肯定不值得爲本地變量做一件事,這個變量將被覆蓋或即將超出範圍。

+0

+1對我而言,將變量清空的嘗試表明您的方法應該分解。 –

1

它不會讓任何區別,你會立即抵消

2

不,在這種情況下,無效將不會產生任何影響。

如果不立即將其分配給其他變量,它將會產生變化。在這種情況下,該對象不會等待參照超出範圍,而是符合GC的條件。

GC通常會收集那些沒有參考的對象。當你指向內存中某個其他對象的引用時,對前一個對象的引用無論如何都會丟失。因此,如果您將null分配給它,則沒有區別。

這將可用於垃圾收集商沒有其他參考吧

2

當一個對象進行垃圾回收JVM分配空值到該對象。

正常情況下,它不值得在Java中置空變量或字段,並且肯定不值得爲本地變量做一件事,這個變量將被覆蓋或即將超出範圍。