gpt4 book ai didi

c# - .net CLR相关问题

转载 作者:太空宇宙 更新时间:2023-11-03 17:36:46 25 4
gpt4 key购买 nike

这是一个与.net CLR相关的问题。

我有3个对象A,B,C

A引用B,B引用c

如果我明确地杀死对象“ A”,堆中的这些对象会发生什么。将对哪些对象进行垃圾回收?(对象A或B或c或全部?)

有人可以详细解释这种情况下的垃圾收集过程。

提前致谢
国民账户体系

最佳答案

首先-您不能“明确杀死对象“ A””;您可以清除对其的引用,但这只是将局部变量设置为null,并且与托管堆上的实际对象无关。您可以Dispose(),但与GC无关。

一切取决于;还能看到B / C吗?如果没有,则有资格领取。但是GC是不确定的。它只会在选择时发生。在某个不确定的时间,GC将启动,检测到这些对象不可达,然后将其删除。在此过程中,它将检查所有具有终结器(仍未完成)的对象,并执行终结器(分两步进行)。

人们经常在可及性方面忘记的一件事是事件。如果B / C订阅一个长期对象上的事件,则B / C是可到达的(由事件发布者访问)。



澄清; GC通过从根对象(线程等)构建树来工作。它遍历每个引用,标记所有可以到达的对象。末尾未标记的任何内容都可以收集。这样可以避免由于数据孤岛断开而导致内存泄漏的COM / COM +问题,其中X => Y和Y => X(因此X和Y都具有正的引用计数,因此都不会清除)。

关于c# - .net CLR相关问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1656692/

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