静态成员变量曾经获得垃圾回收吗?
例如,让我们使用以下类。
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
的新实例? 最佳答案
不,静态成员与Type关联,Type与它所加载的AppDomain关联。
请注意,对于要初始化的类,无需存在HasStatic
的任何实例,并且shared
变量不必具有对List<string>
的引用。
除非您考虑卸载AppDomain的情况,否则可以将静态变量永远视为GC根。 (当然,如果某些更改了HasStatic.shared
的值以引用其他实例,则第一个实例可能有资格进行垃圾回收。)