它更容易顯示的例子後,要問的問題後會發生內存什麼......C#重新分配類
MyClass a = new MyClass();
a.initializeData();
a = new MyClass();
新MyClass的分配空間後,會發生什麼情況我以前的配置呢?是否垃圾收集器會自動收集它,因爲我知道有沒有刪除在C#
我只是想確保我不會有任何內存泄漏。
謝謝!
它更容易顯示的例子後,要問的問題後會發生內存什麼......C#重新分配類
MyClass a = new MyClass();
a.initializeData();
a = new MyClass();
新MyClass的分配空間後,會發生什麼情況我以前的配置呢?是否垃圾收集器會自動收集它,因爲我知道有沒有刪除在C#
我只是想確保我不會有任何內存泄漏。
謝謝!
首先,它被稱爲「創建一個對象」,而不是「重新分配一個類」。
垃圾收集的整個想法是,你不關心你沒有引用的對象會發生什麼:你的代碼就像有無限的內存(在合理的範圍內)。垃圾收集器的目的不是爲你釋放內存,it is to simulate that there is an infinite amount of memory。
碰巧的是,爲了做到這一點,垃圾收集器可能不退先前分配上您持有不時沒有參考記憶;它也可能重組已使用的內存以防止碎片化,並更新所有引用以指向新的內存位置。所有這些都是你不應該關心的實現細節。
當然,瞭解GC的工作原理非常有趣。 :)
孤兒類的內存稍後將從垃圾回收器中解除分配。
假設你的程序運行了足夠長的時間,並且在將來某個點有足夠的內存壓力或發生了明確的垃圾收集,那麼MyClass
的第一個實例將被收集(或將被放到終結器隊列中,如果它已經終結者)。
你不應該擔心當會出現這種情況。它可能發生最早是同時initializeData
正在執行,之後方法通過this
停止訪問任何實例成員(無論是或明或暗地)。
顯式垃圾收集:你不應該在任何時候需要執行此,基準或代碼演示具體的GC行爲之外。
是的,垃圾收集器負責刪除未使用的對象。
誰也不能保證當這種情況發生,但因爲它是一個短命的對象,通常會在下次垃圾收集發生。
如果需要時將對象清理(即你在課堂上使用非託管資源)在控制,需要實現IDisposable
接口,並調用Dispose
方法告訴對象清理資源。
感謝您的鏈接! – ThinkNovelty 2014-12-04 21:18:06