对象还有一些像局部变量那样的范围吗?

时间:2010-11-03 10:45:55

标签: c#-2.0

我有一个困惑,gabage收集器如何决定一个对象不再使用,对象有一定的范围?

就好像我有代码

class A { in x; m1(){}}
class B {A a=new a(); a.x=10; }

所以我想知道当对象变得无法使用时

我的意思是在上面的代码中,如果类到达结束行,那么当它退出该类时,对象a可以进行垃圾收集,之后A类varibale将保持默认值将永久值为10

3 个答案:

答案 0 :(得分:2)

只有声明(类型,成员,本地)具有范围。没别了。

答案 1 :(得分:2)

垃圾收集器通过查找和标记可从已知起始点(例如,每个线程的堆栈,所有静态变量......)到达的所有对象,然后吹走未被标记的对象来工作。完整的解释通常要复杂得多,但这就是它的本质。

答案 2 :(得分:1)

对象的范围与任何其他变量一样,并且由语言规则定义。

当没有其他对象引用它时,会对对象进行垃圾回收。

GC有或多或少的复杂算法来确定。其中一个是引用计数。

当局部变量超出范围时,它会丢失一个引用,如果引用coutn为0则会被垃圾收集。

垃圾收集不是确定性的,也就是说你无法确定何时进行垃圾收集。

将变量设置为null将基本上使变量可以收集垃圾。