我正在一个实现IDisposable接口(interface)的项目中。在这个项目中,我发现我对GarbageCollector的了解可以说是差强人意。因此,我开始阅读一些文档,最后在MSDN上找到了 the "Fundamentals of Garbage Collection" article

您必须了解,在这一点上,我一直认为GarbageCollector是在下水道中工作的人,负责清理程序产生的废物。因此,我很惊讶地阅读以下snippet:



稍后,该文档指出:



如果我理解正确,则GarbageCollector实际上是.NET程序的 MemoryManager !

我知道,它仍然会收集垃圾。但这不像调用歌手作为麦克风支架吗?当然,这是事实,但是这几乎不是您付钱看到它们的原因。 GarbageCollector在表面上的作用远不止废物处理,仅称其为GarbageCollector似乎并不公平。

因此,结论是:

我理解正确吗?还是我要离开?

如果我确实理解正确:.NET开发人员为什么将其称为GarbageCollector?

最佳答案

没错,垃圾收集器实际上是,是内存管理器的一种。

如果您认为能够进行垃圾收集,那么最可行的方法是垃圾收集机制内存分配机制(以及引用解析策略,如果是压缩垃圾)收集器)成为紧密相关的

这样做的原因是,垃圾收集器需要执行许多簿记才能进行操作。为了可靠地执行该簿记,除其他事项外,它还需要有关已发生分配的信息。最明显的实现方法是让垃圾收集器提供其自己的内存分配例程。可以通过提供一种新的内存分配器接口(interface)(替代该语言提供的标准接口(interface),并可能利用它,正如Marco在评论中提到的那样)来实现,也可以通过拦截该语言的标准内存分配器并将其替换为标准的内存分配器来实现。它自己的。

在任何情况下,所有内存管理器都需要提供某种内存分配机制-因此这并不能与众不同。但是,实际上只有少数几个可以自动收集垃圾,因此这是我们在命名垃圾时所关注的重点。从本质上讲,垃圾收集器实际上意味着垃圾收集内存管理器。

现在,它的通用名称确实确实可能听起来有点误导,但不是.NET开发人员提出了它。这样的内存管理器一直被称为垃圾收集器,可能最早是在Lisp中首次出现这种概念。我想,出于历史原因一直保持这种状态。

关于.net - .NET GarbageCollector真的是GarbageCollector吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17694669/

10-11 15:34