.NET垃圾收集器何时会释放此对象?

时间:2016-04-28 12:37:12

标签: .net garbage-collection

Employee obj = new Employee();

obj.Dispose(); //statement 1;
obj = null; //statement 2

GC会删除对象的哪个语句?

语句1和语句2

后面的场景究竟会发生什么

1 个答案:

答案 0 :(得分:1)

可能是其中任何一个,或者没有。

如果默认构造函数和Dispose方法没有副作用,并且编译器可以看到它,它可以完全跳过代码段生成代码,通过考虑整个事情是无操作。

或者,如果只有Dispose方法是no-op,那么GC可以在此行之后收集对象:

Employee obj = new Employee();

或者,如果GC可以证明在Disposeeven if it's still in scope)之后永远不再读取该对象,则它可以在此行之后收集该对象:

obj.Dispose();

或者,如果GC不能证明这些中的任何一个,它可以在此行之后的任何时间进行:

obj = null;

或者,如果GC在整个程序执行期间没有看到任何回收内存的压力,it might not collect the object at all