懒惰<;T>;在GC眼中

本文关键字:GC 眼中 lt 懒惰 gt | 更新日期: 2023-09-27 18:29:19

我想知道:GC如何看待Lazy对象

即:

 Lazy<Foo> f = new Lazy<Foo>( );

"懒惰实例化"推迟对象的创建,直到它被实际访问

这里的f是对象的根吗?(这意味着他不会被录取)?

(此时对象尚未创建…稍后其他代码会在其中添加值)

GC将其视为未引用/未初始化的对象,并对其进行GC检查

这是我需要处理的事情吗?(/害怕?)

 public class Foo
    {
        public int ID { get; set; } 
        public Foo()
        {
           ID = 1;
        }
    }

懒惰<;T>;在GC眼中

f实际上是对Lazy<Foo>实例的引用。封装的Foo实例是独立的,但可以间接访问(保持)。

只要f存在,即它是根或它是可访问的,实例就不会(不能)被收集。

GC并没有什么特别之处。不要将Lazy与WeakReference混淆。