在静态类方法中创建的对象是否被垃圾收集?

时间:2014-02-11 20:47:25

标签: c# asp.net

我正在使用一个有一些方法的静态类,有点像这样:

static class MyClass
{
   public static string SomeMethod()
   {
       SomeObject TheObject = new SomeObject();

       return TheObject.SomeOtherMethod();
}

如您所见,静态方法SomeMethod实例化一个对象然后返回。当它返回时,实例化的对象TheObject是否会被垃圾收集,或者每次MyClass.SomeMethod运行时是否会重新实例化?

感谢。

3 个答案:

答案 0 :(得分:3)

是否可以从代码中任何位置(称为GC根目录)访问的任何位置引用该对象?

没有

然后它可以被GCed。

如果你有某种方式可能获得对该对象的引用,不知何故,那么它就不能被GCed。

答案 1 :(得分:1)

  

当它返回时,实例化的对象TheObject是否被垃圾收集或者得到了   每次MyClass.SomeMethod运行时重新实例化?

  • 它可以是GC,因为没有静态引用(除非显然采用它的方法将它放在某处)。
  • 没有经过重新修复。新的是新的 - 它不是“NewOrReuse”。

答案 2 :(得分:0)

TheObject是一个局部变量,包含对SomeObject实例的引用。每次运行该方法时都会分配一个新实例。

假设该引用保持在方法调用的本地(意味着在方法调用结束时没有对对象引用的外部引用),当该方法返回时,该引用所定位的对象实例有资格进行垃圾收集。

这并不是说它立即被垃圾收集。垃圾收集符合条件。如果内存争用率很低,那么分配的每个这样的实例都可以[理论上]在进程的持续时间内保持不变。