C# 静态变量会被gc回收么?

C# 静态变量会被gc回收么?

静态变量不会被gc回收,但是静态变量所引用的对象会被gc回收

GC不会回收有已被引用的对象的.

GC回收的是已经无效的对象.只有引用存在,对象就不会被回收

@吴瑞祥: 额 我的意思是当静态变量引用变为unll的时候他之前引用的对象可以被回收

@吴瑞祥: 我发现这是个大问题,值类型是不会被回收的,引用类型把引用置为null是可以被回收的

@刘宏玺: ````这个算什么问题``.

垃圾回收本来回收的就是堆空间内的内存对象.值类型是在栈中保存,不需要被回收.因为栈空间内值变量出了作用域后.系统能自动回收的,不像堆里的变量,系统是不知道哪些能回收哪些不能回收的

@吴瑞祥: 不是这么回事吧,现在这个是类型是属于类的,按道理是放在堆当中的

@吴瑞祥: 上面的有错别字

不是这么回事吧,现在这个值类型是属于类的,按道理是放在堆当中的

@刘宏玺: 静态变量是在堆里还是在栈里真不清楚.是在问这个的不

其他回答(5)

其实回收的不是变量,是某个对象所占据的内存,如果存在一个对象,指向它的引用变量的数量为0,那个GC会择机回收它占据的内存。

有道理,不过静态变量的引用什么时候会丢失?

应用程序域卸载的时候回收静态变量

不会被GC回收,静态字段 分配在Loader heap 中,非 GC heap,不受GC控制。

之前看过一篇文章说静态变量的生命周期跟应用程序的生命周期是一样的

静态变量是放在栈里面的,不受GC控制,只有程序关闭退出,内存才会被回收