C# 引用类型在方法中存在多长时间?
How long do C# reference types live inside a method?
我找不到明确的答案。如果我在一个方法中实例化一个引用类型但不将它存储在任何 class 变量中,这个引用在堆上存在多长时间?它是否在方法 return 中被标记为垃圾并最终被垃圾收集器清除?
void DoSomeStuff()
{
var myRefInstance = new Object();
}
无法到达的对象被标记为可收集。对象什么时候被回收取决于GC;如果没有内存压力,它可能永远不会被收集到应用程序结束。
需要注意的是规则是“Object is not reachable”,并不是说没有指向它的引用,两者是不一样的:
void Foo() {
var a = new A();
var b = new B();
a.b = b;
b.a = a; }
当 Foo
退出时,a
和 b
都将被标记为无法访问,即使两者的引用计数器都大于 0。
我找不到明确的答案。如果我在一个方法中实例化一个引用类型但不将它存储在任何 class 变量中,这个引用在堆上存在多长时间?它是否在方法 return 中被标记为垃圾并最终被垃圾收集器清除?
void DoSomeStuff()
{
var myRefInstance = new Object();
}
无法到达的对象被标记为可收集。对象什么时候被回收取决于GC;如果没有内存压力,它可能永远不会被收集到应用程序结束。
需要注意的是规则是“Object is not reachable”,并不是说没有指向它的引用,两者是不一样的:
void Foo() {
var a = new A();
var b = new B();
a.b = b;
b.a = a; }
当 Foo
退出时,a
和 b
都将被标记为无法访问,即使两者的引用计数器都大于 0。