2012-06-05 67 views
2

如果我有對象A,它調用DAO對象B執行一些數據庫更新 - 一旦B's函數完成它AA.finishProcess())調用回調函數這並創建內存問題?我的意思是B然後保持在內存中,直到A完成?或者是B仍然使用GC刪除?垃圾收集和回調

我問這是因爲我正在考慮使用回調函數而不是返回B中的「結果」對象或代碼。

總之,更好的設計(和內存使用)明智地「返回」的結果對象,而不是使用回調調用對象?

PS:請忽略特定的,即,它沒有提到AsycnTask,它是一種做作的情況,讓我的問題在整個:)

乾杯任何幫助

回答

1

這是關於參考。只要你不存儲/保留任何(強)引用(即正確的註銷,一旦對象不再被使用時清除引用等),你不必擔心,因爲對象將被正確處理GC。

+0

非常感謝我一定會在完成清單時確保清除引用 – wired00

1

當你有DAO對象,你會被註冊你的班級爲相應的回叫。

只需取消註冊回叫,並刪除班級中B班的參考。

像下面這樣(這裏以「b」爲B類的對象)。

b.removeListener(this); 
b = null; 

這將告訴JVM引用不再存在於類B中,並且GC將從內存中清除它。

0

我認爲你使用回調會導致內存使用問題。如果不是,我已經感到困惑。如果您提供代碼,我們會更容易理解您的想法。

迄今爲止,關於內存問題或內存泄漏的最佳文檔,標題爲IBM,其名稱爲http://www.ibm.com/developerworks/library/j-leaks/

如果你得到一個數組,列表或任何對象,那麼當你可以並且儘快的時候很容易遵守它。正如你所說,我通常會爲結果對象投票。