asp.net 在静态类方法中创建的对象会被垃圾回收吗?

lmyy7pcs  于 2022-11-19  发布在  .NET
关注(0)|答案(3)|浏览(209)

我使用了一个静态类,它有一些方法,类似于:

static class MyClass
{
   public static string SomeMethod()
   {
       SomeObject TheObject = new SomeObject();
    
       return TheObject.SomeOtherMethod();
}

正如您所看到的,静态方法SomeMethod示例化一个对象,然后返回。

x8goxv8g

x8goxv8g1#

是否存在从任何位置对该对象的任何引用,这些引用可以在代码中的任何位置访问(称为GC根)?
不,不,不
然后就可以通过GCed了。
如果有某种方法可以获得对对象的引用,那么它就不能被GCed。

9gm1akwq

9gm1akwq2#

当它返回时,示例化的对象TheObject是被垃圾回收还是在每次MyClass.SomeMethod运行时被重新示例化?

  • 它可以是GC的,因为没有静态引用(除非很明显,获取它的方法将它放在某个地方)。
  • 没有任何东西可以被重新实体化。新的就是新的--它不是“新的或重用”。
cu6pst1q

cu6pst1q3#

TheObject是一个局部变量,包含对SomeObject示例的引用。每次运行该方法时都会分配一个新示例。
假设该指涉停留在方法呼叫的区域(表示在方法呼叫结束时,没有对象指涉的外部指涉),则当方法传回时,该指涉所找到的对象执行严修就可以进行内存回收。
这并不是说它会立即被垃圾收集,它有资格被垃圾收集,如果内存争用很低,每个这样分配的示例[理论上]会在进程的持续时间内挂起。

相关问题