想象我有:是否列表明确删除对象以前包含
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