我正在尝试了解以下实现中的GC行为。
访问属性后,我返回一个新对象。如果我第二次访问我的媒体资源,则只要我的MyClass
对象还活着,第一个对象将被标记为垃圾回收对象,或者将被植根。
(我知道这是一个糟糕的实现,但目的是要了解GC。)
public class MyClass
{
public Custom CustomProp=>new Custom();
}
public class Custom
{
}
答案 0 :(得分:0)
public Custom CustomProp=>new Custom();
由编译器翻译为getter方法:
public Custom get_CustomProp()
{
return new Custom();
}
因此,没有对存储在您的类中的创建的Custom
实例的引用。不用担心,您(显示的代码)不会阻止GC收集对象。
但是,当然:创建的对象是否符合GC的条件,取决于属性的调用方对引用的作用。只要将活动参考保存在某处,GC就不会收集该对象。
而且-正如Marc所评论-没有为GC标记对象的事情。如果不再引用该对象,则可以将其准备用于GC(简单地放置)。
您的属性被第二次调用的事实对先前返回的实例的“可收集性”没有影响。