想象我有:是否列表明確刪除對象以前包含
List<MyObject> MyList = new List<MyObject>();
MyObject obj1 = new MyObject();
MyObject obj2 = new MyObject();
MyList.Add(obj1);
MyList.Add(obj2);
難道一個
MyList.Clear();
刪除實例: 'OBJ1', 'OBJ 2'?或者他們保存在內存中,但列表現在只是空的?
想象我有:是否列表明確刪除對象以前包含
List<MyObject> MyList = new List<MyObject>();
MyObject obj1 = new MyObject();
MyObject obj2 = new MyObject();
MyList.Add(obj1);
MyList.Add(obj2);
難道一個
MyList.Clear();
刪除實例: 'OBJ1', 'OBJ 2'?或者他們保存在內存中,但列表現在只是空的?
只要你有一個對象的引用,你可以在你的代碼中訪問它,它在內存中並且垃圾收集器沒有收集它。所以答案是不,它們保存在內存中
你可以閱讀更多關於垃圾回收here。
如果代碼是這樣
List<MyObject> MyList = new List<MyObject>();
MyList.Add(new MyObject());
MyList.Add(new MyObject());
然後當你打電話MyList.Clear()
你沒有提到你創建MyObject
太垃圾收集器會收集它們並從內存中刪除它們在它的下一次運行。 如果要清除列表後,從內存中刪除obj1
和obj2
你應該使用
obj1 = null;
obj2 = null;
GC.Collect()
但要注意迫使垃圾收集的後果。
clear
功能只是清除列表。 obj1
和obj2
不會是null
。 你可以很容易地通過打印對象檢查:
Console.WriteLine(obj1);
我相信這是'C#'而不是java – Jonesopolis 2014-11-03 13:32:49
刪除實例: 'OBJ1', 'OBJ 2'?或者他們保存在內存中,但列表現在只是空的?
它們保存在內存中,直到沒有對象的引用並且GC刪除它們。在這種情況下,只有您的列表將爲空。您可以通過在調用Clear
方法後嘗試訪問對象的成員來輕鬆地進行測試。
對象仍然存在,但列表爲空。垃圾收集器(GC)一旦沒有引用它就立即刪除對象。 – MichaelS 2014-11-03 13:30:12