gpt4 book ai didi

c# - 为什么带有终结器的类需要不止一个垃圾回收周期?

转载 作者:太空狗 更新时间:2023-10-30 00:44:00 26 4
gpt4 key购买 nike

This文章说

If an object has a finalizer, it is not immediately removed when the garbage collector decides it is no longer ‘live’. Instead, it becomes a special kind of root until .NET has called the finalizer method. This means that these objects usually require more than one garbage collection to be removed from memory, as they will survive the first time they are found to be unused.

我的问题是,为什么GC发现对象不能再被引用时,不调用finalizer,直接回收对象?为什么它需要的不仅仅是垃圾收集?

最佳答案

需要考虑的两点:

  • 终结器可能需要一些时间才能完成。例如,它可能最终会关闭资源或类似的东西。您不希望它成为垃圾收集时间的一部分,这可能会阻止线程工作(当它们只想获得一些内存时)。通过单独运行 finalization,GC 本身可以非常快速地完成,并且 finalization 工作可以与以后的其他工作并行完成。

  • 终结器可能会通过使对象再次可见来复活该对象 - 但无论如何(我怀疑)检测到它都需要再次扫描内存...那么为什么不等到下一次它会发生呢?

关于c# - 为什么带有终结器的类需要不止一个垃圾回收周期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9030126/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com