線程停止會回收對象嗎?
要看什么類型的資源,只有托管內存才有垃圾回收,別的資源(比如打開的句柄、數據庫鏈接、文件鎖定、非托管內存)不會自動回收。
但是一些封裝好的庫會實現dispose方法,并且在析構函數里調用,回收這個對象用的非托管資源(上述各種)。所以還是可以回收。
但是這就有個問題了,就是C#的垃圾回收是“懶惰”的,也就是并不是一個對象不再訪問,就立刻回收,而是內存使用超過一定闕值,才會垃圾回收。
如果內存沒用多少,而非托管資源資源用了很多,那么這些非托管資源就得不到及時的回收了。
C#的垃圾回收,采用的是從根對象遍歷,并且把所有無法訪問到的資源標記為垃圾,進行回收。這不同于一些語言,比如有的語言用的是引用計數。當一個對象不再引用就立刻回收。
所以垃圾回收肯定有,但是不一定是“線程死亡后”立刻就回收。