pas*_*ena 10 .net c# garbage-collection
据我所知,一旦我实现了类的析构函数,c#中的垃圾收集器就会将类的所有对象放入终结队列中.当我阅读GC.Suppresfinalize的文档时,它提到对象头已经设置了一个用于调用finalize的位.
我想知道为什么GC的实现者必须将所有对象放入队列中,并将内存释放延迟1-2个周期.他们不能只是在释放内存时查看位标志,然后调用对象的finalize然后释放内存?
毫无疑问,我是一个白痴,我无法理解GC的工作.我提出这个问题只是为了增进我的理解或填补我所知的缺失空白
编辑:如果位标志用于suppressfinalize,GC实现者可能为此目的在对象头中添加了另一个标志,不是吗?
这里有一个很好的解释
Finalizer Queue 和 Control+ThreadMethodEntry 是什么?
本质上的原因是,GC 必须等待终结器代码执行可能并不总是理想的,因此排队终结器允许将终结推迟到更方便的时候。