.NET垃圾收集器基础
这个问题在这里已经有了答案:
以下是一些有用的文章:
(由Jeffrey Richter撰写)
(由Rico Mariani提供)
在某些情况下你是对的。 GC以悲观的眼光看待这个问题 - 也就是说,它假设所有事情(在0代)都将被GCed。
它通过称为“标记”的第一次扫描从字面上检查堆中的所有内容,其中检查是否有任何内容引用它。 由于它们都是引用类型和其他引用,所以它将递归地导航引用。 别担心 - 有逻辑不要进入无限循环!
如果它发现一个对象没有被引用,它将首先标记它,通过在该对象内设置一个称为同步块索引的标志。
在遍历堆中的每个对象之后,它将开始一个称为“压缩”的过程,即将所有剩余对象转移到同一个内存区域,使内存保持清晰。 它将一起保留同一代的对象,因为它们在统计上更有可能在同一时间被去引用。
因此这会减少所需的内存。
垃圾收集不一定会加速您的程序,但确实允许它重新使用未使用对象占用的空间。
关于这个问题有许多文章。 我个人喜欢Jeffrey Richter的“CLR via C#”,他给出了一个关于它是如何工作的精彩篇章。
我目前正在阅读这本书,以帮助我在大学的垃圾收集独立研究项目。 如果你真的想了解垃圾收集的细节,我建议阅读本书,因为它似乎是最好的。 这很可能包含比您要查找的更多信息,但如果您希望将来编写垃圾收集器,这可能会有所帮助。
链接地址: http://www.djcxy.com/p/79091.html