Employee obj = new Employee();
obj.Dispose(); //statement 1;
obj = null; //statement 2
GC会删除对象的哪个语句?
语句1和语句2
后面的场景究竟会发生什么答案 0 :(得分:1)
可能是其中任何一个,或者没有。
如果默认构造函数和Dispose
方法没有副作用,并且编译器可以看到它,它可以完全跳过代码段生成代码,通过考虑整个事情是无操作。
或者,如果只有Dispose
方法是no-op,那么GC可以在此行之后收集对象:
Employee obj = new Employee();
或者,如果GC可以证明在Dispose
(even if it's still in scope)之后永远不再读取该对象,则它可以在此行之后收集该对象:
obj.Dispose();
或者,如果GC不能证明这些中的任何一个,它可以在此行之后的任何时间进行:
obj = null;
或者,如果GC在整个程序执行期间没有看到任何回收内存的压力,it might not collect the object at all。