属性 对象何时取消根并标记为垃圾回收?
When property object get unrooted and marked for garbage collection?
我试图了解以下实现中的 GC 行为。
当我的 属性 被访问时,我 return 一个新对象。如果我第二次访问我的 属性,第一个对象是否会被标记为垃圾收集,或者只要我的 MyClass
对象还活着,它就会被植根。
(我知道这是一个糟糕的实现,但目的是了解 GC。)
public class MyClass
{
public Custom CustomProp=>new Custom();
}
public class Custom
{
}
public Custom CustomProp=>new Custom();
被编译器翻译成 getter 方法:
public Custom get_CustomProp()
{
return new Custom();
}
因此没有引用存储在您的 class 中的已创建 Custom
实例。不用担心,您(您显示的代码)不会阻止 GC 收集对象。
但当然:创建的对象是否符合 GC 条件取决于您的 属性 的 caller 对引用执行的操作。只要活动引用保存在某处,GC 就不会收集该对象。
而且 - 正如 评论的那样 - 没有 "marking" GC 对象这样的东西。如果一个对象不再被引用,它就可以进行 GC(简单地说)。
您的 属性 被第二次调用的事实对先前 return 实例的 "collectability" 没有影响。
我试图了解以下实现中的 GC 行为。
当我的 属性 被访问时,我 return 一个新对象。如果我第二次访问我的 属性,第一个对象是否会被标记为垃圾收集,或者只要我的 MyClass
对象还活着,它就会被植根。
(我知道这是一个糟糕的实现,但目的是了解 GC。)
public class MyClass
{
public Custom CustomProp=>new Custom();
}
public class Custom
{
}
public Custom CustomProp=>new Custom();
被编译器翻译成 getter 方法:
public Custom get_CustomProp()
{
return new Custom();
}
因此没有引用存储在您的 class 中的已创建 Custom
实例。不用担心,您(您显示的代码)不会阻止 GC 收集对象。
但当然:创建的对象是否符合 GC 条件取决于您的 属性 的 caller 对引用执行的操作。只要活动引用保存在某处,GC 就不会收集该对象。
而且 - 正如
您的 属性 被第二次调用的事实对先前 return 实例的 "collectability" 没有影响。