垃圾收集参数

时间:2014-09-18 03:28:33

标签: parameters garbage-collection clr

每个人都知道 - 垃圾收集器清除未使用对象的内存。

我的问题是,用于定义此对象是否未使用的参数是什么?

2 个答案:

答案 0 :(得分:2)

指向对象的指针数为零=>对象未使用(无法访问)

答案 1 :(得分:1)

垃圾收集的两种主要形式是Mark&扫描或引用计数。

大多数现代语言使用多种方法的组合或变体。这将涵盖每个方案的一般概念。

此外,逃逸分析用于“减少”“垃圾”的数量。

Mark & Sweep

这可以通过使用所有对象,使用单个布尔“标记”参数来实现。

  1. 首先将内存空间中的所有对象标记为“false”。
  2. 从顶部的“全局”对象开始,对于每个子对象,将其标记为“true”
  3. 对于每个子项,将它们标记为“true”。对最初为“false”的每个子项重复此步骤。 (递归)
  4. 最后用“false”删除所有对象。随后(可能在稍后的时间)重复该过程
  5. Reference Counting

    这适用于使用整数“父引用”参数计算数量的概念,并在其计数达到零时删除该对象。

    1. 创建对象/ var并将其添加到全局/其他对象时。其引用计数加1。
    2. 从全局/父对象中删除对象/ var时。它的引用计数减少了1。
    3. 如果删除后对象引用计数为零。它是“垃圾收集”,因为没有人“拥有它”
    4. Escape Analysis

      通过分析执行代码,是一种用于“减少”垃圾量的附加方法。对于临时变量,在函数执行后永远不会是“持久的”。然后,在执行函数后立即清除这些对象/变量。避免将对象添加到垃圾收集系统的需要(其中将有开销)。这一步对于确保许多现代语言的表现至关重要。

      Detailed advantages / disadvantages of Mark & Sweep / Reference Counting can be found on wiki