首页 新闻 会员 周边

.NET Core 中对象引用自己是否会被 GC 正常回收

0
悬赏园豆:100 [已解决问题] 解决于 2019-02-17 11:20

在 .NET Core 中如果一个对象通过成员变量引用了自己(代码如下),这个对象是否会被 GC 正常回收?

public class EnterpriseUserService : IEnterpriseUserService
{
    private readonly IEnterpriseUserService _enterpriseUserService;
    public EnterpriseUserService()
    {
        _enterpriseUserService = this;
    }
}
dudu的主页 dudu | 高人七级 | 园豆:30994
提问于:2019-02-16 22:09
< >
分享
最佳答案
1

tldr: 能够正常 GC


根据这篇文档,GC 在 Mark Phase 会从当前应用程序的栈、特定的集合句柄(我猜是 WeakReference 之类的东西)以及静态对象开始进行递归的标记,相关的代码可以在 coreclr 中找到:https://github.com/dotnet/coreclr/blob/master/src/gc/gc.cpp#L20090

也就是说,不管是自身引用还是循环引用,只要无法从 GC 的查找起点到达,就不会被标记为存活的对象

收获园豆:100
不如隐茶去 | 小虾三级 |园豆:559 | 2019-02-17 01:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册