C# 靜態變量會被gc回收么?
C# 靜態變量會被gc回收么?
靜態變量不會被gc回收,但是靜態變量所引用的對象會被gc回收
GC不會回收有已被引用的對象的.
GC回收的是已經無效的對象.只有引用存在,對象就不會被回收
@吳瑞祥: 額 我的意思是當靜態變量引用變為unll的時候他之前引用的對象可以被回收
@吳瑞祥: 我發現這是個大問題,值類型是不會被回收的,引用類型把引用置為null是可以被回收的
@劉宏璽: ````這個算什么問題``.
垃圾回收本來回收的就是堆空間內的內存對象.值類型是在棧中保存,不需要被回收.因為棧空間內值變量出了作用域后.系統能自動回收的,不像堆里的變量,系統是不知道哪些能回收哪些不能回收的
@吳瑞祥: 不是這么回事吧,現在這個是類型是屬於類的,按道理是放在堆當中的
@吳瑞祥: 上面的有錯別字
不是這么回事吧,現在這個值類型是屬於類的,按道理是放在堆當中的
@劉宏璽: 靜態變量是在堆里還是在棧里真不清楚.是在問這個的不
其他回答(5)
其實回收的不是變量,是某個對象所占據的內存,如果存在一個對象,指向它的引用變量的數量為0,那個GC會擇機回收它占據的內存。
有道理,不過靜態變量的引用什么時候會丟失?
應用程序域卸載的時候回收靜態變量
不會被GC回收,靜態字段 分配在Loader heap 中,非 GC heap,不受GC控制。
之前看過一篇文章說靜態變量的生命周期跟應用程序的生命周期是一樣的
靜態變量是放在棧里面的,不受GC控制,只有程序關閉退出,內存才會被回收