.NET垃圾收集器基础

这个问题在这里已经有了答案:

  • 了解.NET 3中的垃圾收集答案

  • 以下是一些有用的文章:

  • 垃圾收集:Microsoft .NET Framework中的自动内存管理
    (由Jeffrey Richter撰写)
  • 垃圾收集器基础知识和性能提示
    (由Rico Mariani提供)

  • 在某些情况下你是对的。 GC以悲观的眼光看待这个问题 - 也就是说,它假设所有事情(在0代)都将被GCed。

    它通过称为“标记”的第一次扫描从字面上检查堆中的所有内容,其中检查是否有任何内容引用它。 由于它们都是引用类型和其他引用,所以它将递归地导航引用。 别担心 - 有逻辑不要进入无限循环!

    如果它发现一个对象没有被引用,它将首先标记它,通过在该对象内设置一个称为同步块索引的标志。

    在遍历堆中的每个对象之后,它将开始一个称为“压缩”的过程,即将所有剩余对象转移到同一个内存区域,使内存保持清晰。 它将一起保留同一代的对象,因为它们在统计上更有可能在同一时间被去引用。

    因此这会减少所需的内存。

    垃圾收集不一定会加速您的程序,但确实允许它重新使用未使用对象占用的空间。

    关于这个问题有许多文章。 我个人喜欢Jeffrey Richter的“CLR via C#”,他给出了一个关于它是如何工作的精彩篇章。


    我目前正在阅读这本书,以帮助我在大学的垃圾收集独立研究项目。 如果你真的想了解垃圾收集的细节,我建议阅读本书,因为它似乎是最好的。 这很可能包含比您要查找的更多信息,但如果您希望将来编写垃圾收集器,这可能会有所帮助。

    链接地址: http://www.djcxy.com/p/79091.html

    上一篇: .NET Garbage Collector Basics

    下一篇: Structs, heaps, and stacks