静态成员变量曾经获得垃圾回收吗?
例如,让我们使用以下类。
public class HasStatic { private static List<string> shared = new List<string>(); }
并假设它是这样使用的:
//Startup { HasStatic a = new HasStatic(); HasStatic b = new HasStatic(); HasStatic c = new HasStatic(); HasStatic d = new HasStatic(); //Something } //Other code //Things deep GC somewhere in here HasStatic e = new HasStatic();
当a,b,c,和d被垃圾回收不静态成员shared得到收集呢?可能e会得到一个新的实例shared?
a
b
c
d
shared
e
不,静态成员与Type关联,Type与它所加载的AppDomain关联。
请注意,不必初始化类的 任何 实例,HasStatic并且shared变量不必具有对的引用List<string>。
HasStatic
List<string>
除非您考虑卸载AppDomain的情况,否则可以将静态变量永远视为GC根。(当然,如果某些值更改了HasStatic.shared引用其他实例的值,则第一个实例 可能有 资格进行垃圾回收。)
HasStatic.shared