假設(shè)我有這樣的代碼:public class OuterClass{ InnerClass myInnerClass = new InnerClass(); public class InnerClass{ }}// somewhere I have created an OuterClass instance:OuterClass outerClass = new OuterClass();// do something// ...outerClass = null;問題:只設(shè)置outerClassnull來避免內(nèi)存泄漏是否足夠?InnerClass對 有參考OuterClass,OuterClass對 有參考InnerClass。因此,由于這兩個對象都有對它們的引用,它們不能被垃圾回收!
1 回答

森欄
TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超5個贊
如果沒有其他人引用該myInnerClass
實(shí)例,則不存在“泄漏”(首先,這是一個非常強(qiáng)大的詞)。
只要任何活動對象仍然具有myInnerClass
對該內(nèi)部類實(shí)例的引用,就不能對其進(jìn)行垃圾回收(畢竟,它仍然可以訪問和使用)——并且該內(nèi)部類實(shí)例也將保持其外部類實(shí)例處于活動狀態(tài)(因?yàn)榭梢詮膬?nèi)部實(shí)例間接訪問)。
這與垃圾收集器的一般工作方式?jīng)]有什么不同。它不會被引用循環(huán)拋棄。當(dāng)無法再從“活根”到達(dá)時,它會可靠地收集整個循環(huán)。
添加回答
舉報
0/150
提交
取消