我使用了一个静态类,它有一些方法,类似于:
static class MyClass { public static string SomeMethod() { SomeObject TheObject = new SomeObject(); return TheObject.SomeOtherMethod(); }
正如您所看到的,静态方法SomeMethod示例化一个对象,然后返回。
SomeMethod
x8goxv8g1#
是否存在从任何位置对该对象的任何引用,这些引用可以在代码中的任何位置访问(称为GC根)?不,不,不然后就可以通过GCed了。如果有某种方法可以获得对对象的引用,那么它就不能被GCed。
9gm1akwq2#
当它返回时,示例化的对象TheObject是被垃圾回收还是在每次MyClass.SomeMethod运行时被重新示例化?
cu6pst1q3#
TheObject是一个局部变量,包含对SomeObject示例的引用。每次运行该方法时都会分配一个新示例。假设该指涉停留在方法呼叫的区域(表示在方法呼叫结束时,没有对象指涉的外部指涉),则当方法传回时,该指涉所找到的对象执行严修就可以进行内存回收。这并不是说它会立即被垃圾收集,它有资格被垃圾收集,如果内存争用很低,每个这样分配的示例[理论上]会在进程的持续时间内挂起。
TheObject
SomeObject
3条答案
按热度按时间x8goxv8g1#
是否存在从任何位置对该对象的任何引用,这些引用可以在代码中的任何位置访问(称为GC根)?
不,不,不
然后就可以通过GCed了。
如果有某种方法可以获得对对象的引用,那么它就不能被GCed。
9gm1akwq2#
当它返回时,示例化的对象TheObject是被垃圾回收还是在每次MyClass.SomeMethod运行时被重新示例化?
cu6pst1q3#
TheObject
是一个局部变量,包含对SomeObject
示例的引用。每次运行该方法时都会分配一个新示例。假设该指涉停留在方法呼叫的区域(表示在方法呼叫结束时,没有对象指涉的外部指涉),则当方法传回时,该指涉所找到的对象执行严修就可以进行内存回收。
这并不是说它会立即被垃圾收集,它有资格被垃圾收集,如果内存争用很低,每个这样分配的示例[理论上]会在进程的持续时间内挂起。