我正在使用一个有一些方法的静态类,有点像这样:
static class MyClass
{
public static string SomeMethod()
{
SomeObject TheObject = new SomeObject();
return TheObject.SomeOtherMethod();
}
如您所见,静态方法SomeMethod
实例化一个对象然后返回。当它返回时,实例化的对象TheObject
是否会被垃圾收集,或者每次MyClass.SomeMethod
运行时是否会重新实例化?
感谢。
答案 0 :(得分:3)
是否可以从代码中任何位置(称为GC根目录)访问的任何位置引用该对象?
没有
然后它可以被GCed。
如果你有某种方式可能获得对该对象的引用,不知何故,那么它就不能被GCed。
答案 1 :(得分:1)
当它返回时,实例化的对象TheObject是否被垃圾收集或者得到了 每次MyClass.SomeMethod运行时重新实例化?
答案 2 :(得分:0)
TheObject
是一个局部变量,包含对SomeObject
实例的引用。每次运行该方法时都会分配一个新实例。
假设该引用保持在方法调用的本地(意味着在方法调用结束时没有对对象引用的外部引用),当该方法返回时,该引用所定位的对象实例有资格进行垃圾收集。
这并不是说它立即被垃圾收集。垃圾收集符合条件。如果内存争用率很低,那么分配的每个这样的实例都可以[理论上]在进程的持续时间内保持不变。