引用对象的垃圾收集

use*_*621 -2 c# garbage-collection

假设我有一个引用另一个类的类,如下所示:

class1
{

}

class2
{
    int A;
    class1 B;

    public class2(int a, class1 b){
        A =a;
        B = b;
    }
Run Code Online (Sandbox Code Playgroud)

现在在另一种方法中我创建了一个新实例:

class3
{
    class2 myobject;

    mymethod()
    {
        class2 myobject = new class2(45, new class1( some parameters));
    }
}
Run Code Online (Sandbox Code Playgroud)

当新的class1(一些参数)内存是免费的?

Eri*_*ert 5

何时释放新创建的class1实例?

不可能肯定地说.垃圾收集器可以在选择时释放它,或者选择永不释放它.

可以释放内存的最新内容是什么?

不要求释放内存.该程序可以永远运行,永远不会收集.

最早可以释放内存的是什么?

它可以在分配实例后立即class2释放.鉴于永远不会读取局部变量,因此不需要实际存在局部变量.抖动可以将其优化,这意味着没有gc根class2,因此可以立即释放,因此class1它所持有的实例也可以.

更一般地说:虽然你想要了解运行时的工作方式是好的,但不要强调它.99.99%的时间垃圾收集器完全按照您的意愿完成,而不用考虑它.