2011-07-20 35 views
9

是否有解決方案來銷燬對象本身的實例?如何破壞對象本身

我在尋找的東西,看起來像:

class KillMe { 
    .... 
    public void destroy() { 
     this.getObject = null //this is only for demonstrate my idea 
    } 

    .... 
} 
+3

你爲什麼想要?無論如何,java對象不能被垃圾收集器以外的任何東西「銷燬」。 – skaffman

+0

我想使NULL爲NULL的對象在會話範圍內是BEAN。我也想在當前的對象實例中做到這一點。 – Smolda

+0

如果這是一個Spring問題,那麼將其作爲一個整體來解釋,然後正確解釋你想要達到的目標。 – skaffman

回答

14

Java對象的生活,直到不再有他們的任何引用。由於對象無法確定自身有多少引用,因此對象無法「自我銷燬」。

0

你想要做什麼的例子表明對物體如何/何時被破壞/清理缺乏瞭解。

class KillMe { 
    .... 
    public void destroy() { 
     this.getObject = null //this is only for demonstrate my idea 
    } 
} 

你那裏調用(this.getObject)獲取當前對象的引用,然後設置一個基準爲空(即,不再在當前對象的指向,它沒有做任何事情的對象本身,也不會改變代碼中其他變量碰巧指向的對象

想象一下這種方式......變量指向值(對象)直到沒有更多的變量指向給定的值,值保留在周圍(而不是垃圾收集/銷燬)爲了移除對某個值的所有變量引用,你需要找到指向它的所有變量並將它們指向別的東西(ex,null)。不能做到這一點(儘管我認爲沒有足夠的可怕反射和/或字節碼魔法是不可能的;)

想想另一種方式,如果你能夠銷燬價值/對象本身,會發生什麼所有其他目前指向它的變量?他們現在是否指向釋放內存,導致一些段錯誤的Java版本?

4

該對象無權訪問對它的引用,因此無法將它們設置爲null或其他內容。一個對象只能在垃圾回收器出現時被「銷燬」,並清除所有未引用的對象。

如此說來,試試這個:

public void destroy() { 
    System.exit(0); 
} 
+0

你怎麼看[一個不應該調用System.exit(0)](http://stackoverflow.com/a/30142476/852795)? –

1

不,對象不能自殺。任何參考本身只是一個參考。

要「清除」其內部的對象,只需清除所有實例變量。

要「清除」自身以外的對象,可以將變量設置爲null。