字符串和静态字段是垃圾收集吗?

本文关键字:静态 字段 字符串 | 更新日期: 2023-09-27 18:03:53

什么时候字符串和静态字段被垃圾收集器回收?

我问这个是因为我知道ASP中的static s。NET总是实时的。

字符串和静态字段是垃圾收集吗?

垃圾收集器只收集不可访问的对象。静态字段引用的对象在其类加载后就可以访问,因此它显然不会被收集(当然,除非该字段被设置为引用其他内容,从而导致原始对象可能有资格被收集)。

至于字符串,这取决于。字面值字符串是内部的,因此总是可访问的。

字符串是对象,在未引用时将被收集。

静态字段通常保持对对象的永久引用,从而防止这些对象被收集。但只要你仍然需要这些东西,那就很好。

任何引用对象的static字段将阻止该对象被收集,因为static字段与类的Type对象相关联。它们依次与AppDomain相关联,因此将作为GC根。

对于strings,它取决于它是否被截取。如果存在,则当前AppDomain的内部池将引用它,从而防止收集。如果不是,那么string的行为将像任何其他类对象一样,并且当它不再通过GC根的引用链访问时,它有资格被收集。

请注意,在这两种情况下,如果卸载了AppDomain,则对象将有资格进行收集。

不,垃圾收集器不会收集静态字段。一般来说,只要类的实例存在并且指向它,垃圾收集就不会收集类。