共享变量和垃圾收集

gee*_*hic 5 .net vb.net garbage-collection

我一直在读.NET中的垃圾收集,我希望得到一些澄清.所以,据我所知,如果我声明一个公共共享类变量,GC将永远不会摆脱它.它是否正确?

那么,私有变量呢?请看以下示例:

public class myClass
    private shared myString As String

    public sub ChangeString(newString As String)
        myString = newString
    end sub
end class
Run Code Online (Sandbox Code Playgroud)

如果没有类的实例,共享变量现在会得到GC吗?如果我将ChangeString改为共享子怎么办?

Ree*_*sey 5

所以,据我所知,如果我声明一个公共共享类变量,GC将永远不会摆脱它.它是否正确?

几乎.GC不会清除共享变量引用的字符串.

但是,如果ChangeString使用新字符串调用,则指向的字符串myString将不再受此引用的影响,并且可能符合GC的条件.但是,新字符串(引用newString)现在将变为root myString变量,从而防止它被垃圾回收.

如果没有类的实例,共享变量现在会得到GC吗?

不.共享变量是对象的根,因为它由类的"类型"拥有,而不是任何实例.

如果我将ChangeString改为共享子怎么办?

这根本没有效果.