查询垃圾收集器

时间:2011-05-02 07:06:04

标签: c#-4.0

我知道GC会释放obj的内存,而这个内存并没有被进一步使用,但我知道GC释放内存的形式是类似对象或参考或价值.... 请帮帮我。

提前感谢...

2 个答案:

答案 0 :(得分:1)

作为对问题评论的回应,您似乎需要澄清一些概念:

在.NET中,对象存在于内存中的某个位置。 引用有点像指向这样的对象/内存位置的指针。 是一个整数值(如123的数字)。

例如,假设您有一个 MyClass 类型的对象,并且您已创建了一个新实例。该对象包含一个字符串。该字符串是另一个对象, MyClass 的实例包含对字符串对象的引用。

垃圾收集器仅在对象上运行。它跟踪对象的引用,如果没有人再引用该对象,则垃圾收集器可以释放该对象。在我们的示例中,如果垃圾收集器注意到没有人持有对 MyClass 实例的引用,那么它确保释放该对象。这反过来使得对字符串的引用消失,然后垃圾收集器也可以释放字符串(当然,如果没有其他人持有引用)。值不需要以任何特殊方式处理,因为它们是属于对象的内存的一部分(因此不能“独立地”释放)。

Java,BTW也是如此。

答案 1 :(得分:0)

当没有对它的引用时,引用类型(类)的对象变为垃圾。每当GC下次运行时,它将在此后的一段时间内收集。这些对象可能是垃圾的原因是因为它们可以从程序中的多个位置引用,因此程序的任何单独部分都不能释放该对象,因为其他部分可能仍然需要它。 GC的职责是发现程序的任何部分何时不再需要该对象。

值类型的对象(结构或类似整数的内置类型)只是复制到需要使用它的每个地方,因此从程序的多个部分使用一个值没有问题。值类型不需要GC,因为它们始终是确保它们被释放的其他东西的一部分。当方法返回时,释放存储在堆栈上的值(例如,方法中的局部变量)。当该类对象变为垃圾时,将释放存储在类对象中的值。