2011-05-02 79 views
0

我知道GC发布obj的内存,这是没有进一步使用,但我知道一件事情,GC释放内存在哪种形式的对象或参考或价值....请帮助我。关于垃圾收集器的查询

在此先感谢...

+0

目前尚不清楚你的问题是什么。你问* GC如何释放内存?或者它负责释放哪些类型的东西? – Wyzard 2011-05-02 07:09:56

+0

我想知道一件事情GC释放内存中的对象或refrence或价值... – 2011-05-02 07:20:41

+0

恐怕句子没有多大意义。你能否试着改写它,并用另一种/更详细的方式来描述它? – DarkDust 2011-05-02 07:24:22

回答

1

至于评论这个问题的回应,看来你需要澄清几个概念:

在.NET中,对象地方住记忆。 A 参考有点像指向这种对象/内存位置的指针。 A 是一些不可或缺的数值(123的数字)。

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

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

对于Java,BTW也是如此。

0

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

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