我一直在阅读有关垃圾收集的内容,但所有描述都假定您已经实现了堆保存,分配和记忆对象。
我发现很难找到关于托管堆的经文。有人可以提到几种算法,数据结构和其他资源吗?
答案 0 :(得分:0)
我不太确定你在这里问的是什么 - 堆的管理与实际的垃圾收集算法密切相关,所以我有点惊讶你提到的参考文献没有解释如何堆被管理。如果您可以指出您已阅读的说明,可能会有所帮助。
我想问题的根源可能是内存管理器实际上如何跟踪已分配的所有对象,以便它可以找到不再被引用的对象。最简单的方法是通过分配对象的链接列表 - 为每个对象分配指向列表中下一个对象的指针的额外空间。
非垃圾收集的内存管理器通常还会保留已释放的对象列表,但垃圾收集的内存管理器通常能够避免这种情况,因为它可以识别指向特定对象的所有引用,允许它通过在内存中移动对象来压缩内存。因此可以假设它总是有一个连续的可用空闲块,只需保留一个指向空闲内存开头的基指针。
This article是一个有用的起点,它解释了.NET中内存管理的一般原则。