2013-03-26 74 views
1

我擁有一些大對象類:Java的關閉/清理

public class MyClass { 

    BigObject bo; 

    public MyClass() { ... } 
} 

我應該做類似下面的關閉方法:

public void close() { 
    bo = null; 
} 

我覺得這是很好的垃圾收集(?)我在正確的軌道上嗎?我應該如何處理這些類的清理?

+3

不,不必要。只是讓它超出範圍。 – Lucas 2013-03-26 20:15:15

+0

另請參閱http://stackoverflow.com/questions/1481178/forcing-garbage-collection-in-java – Bizmarck 2013-03-26 20:16:47

+0

在Java中不考慮清理對象.Java將爲您處理它。你甚至無法控制垃圾收集部分。然而,如果你不想讓軟件的任何部分訪問對象,那麼使對象爲空可能是個好主意 – Addict 2013-03-26 20:21:42

回答

4

我覺得這是很好的垃圾收集

不,它只是使代碼混亂。

什麼是要參考MyClass的實例嗎?如果你真的需要MyClass的實例來保持活着,但不是BigObject,那麼 - 並且只有這樣 - 你應該打擾bo爲空。但同時,你也應該考慮你的設計。通常,一個階級的所有狀態對其整個生命週期都很重要。這條規則有例外,但它們相對較少。

MyClass實例是符合垃圾收集,其bo變量的值將是無關的BigObject的實例是否符合垃圾收集,所以不要緊,無論它是不是被設置爲null ...但它確實在最終的代碼量方面有很大的不同不是必須編寫試圖手動清理後自己。

你應該清理資源,如流,本地句柄等 - 但通常你可以讓垃圾回收器處理內存。

0

只要你失去了參照外MyClass對象,內BigObject參考被自動理解爲uncreachable所以它使至垃圾收集器沒有差別是否是null與否。不要使用這些不必要的代碼來混淆您的代碼庫;編寫充分利用Java中複雜垃圾收集子系統的優點和服務的代碼。