.NET 垃圾收集器

.NET 垃圾收集器

”.NET 垃圾收集器“要求用“malloc”或“new”分配記憶體,使用用戶記憶體管理自動化,任務是跟蹤所有對象被引用到的地方。

基本介紹

  • 中文名:NET 垃圾收集器
  • 任務:跟蹤所有對象被引用到的地方
  • 使用:用戶記憶體管理自動化
  • 要求:用“malloc”或“new”分配記憶體
定義,負責,

定義

垃圾收集器使用戶記憶體管理自動化。在以前的C++中,你必須用“malloc”或者“new”來分配記憶體,然後在適當的時候釋放記憶體。你必須保證在釋放之前記憶體沒有被別人使用,如果你把記憶體給了別人,往往你就不確定應該何時釋放記憶體了。當你釋放了記憶體,不知道別人正在使用這塊記憶體時,就產生了程式崩潰的問題。所以,當你顯式進行“new”和“delete”時,記憶體管理是一個複雜的問題,並且,此時你的代碼不可組合。要么你必須確定對自己的記憶體有完全的控制,因此,要達到這種完全隔離的目的,你必須在將記憶體傳遞給別的模組時進行完全拷貝,這樣,別的模組就只對這個完全拷貝的記憶體負責。要么你就得在某個地方形成對整個記憶體池的統一的管理,這就是自動化記憶體管理,這就是垃圾收集器的工作。

負責

垃圾收集器本質上就是負責跟蹤所有對象被引用到的地方,關注對象不再被引用的情況,回收相應的記憶體,並且用高效率的方式來做這件事,很可能其效率甚至高於傳統的“new”和“delete”範疇。事實上,我們試圖超過“new”和“delete”,因為垃圾收集器給我們提供了新的機會,而你不會對新機會設定限制。舉個例子,你必須知道每個對象在何處被引用,你必須確定每個對象是否真的被引用了。而一旦你做到了這一點,你會發現自己可以移動對象,壓縮對象占用的記憶體空間,把對象在整個記憶體內搬來搬去,因為你知道對該對象的每處引用,你可以修改所有的引用。在C++中這是不可能的。如果我們除了使“delete”自動化外,還是象“new”和“delete”那樣管理記憶體,我們一定會比“new”和“delete”慢,因為我們僅僅增加了額外的開銷。但是,做了記憶體空間的智慧型壓縮之後,我們發現自己的速度能夠超過“new”和“delete”,因為我們能夠保持非常緊湊,從而形成快取本地化,頁面本地化等等優勢,因此,結果很好,尤其是對於非常難以管理的伺服器記憶體來說更是如此。例如,對於伺服器堆空間碎片化或者相似的問題來說,事實上,我們做得比過去任何嘗試都要好。性能不會隨著時間的過去而下降,我們得到了穩定的記憶體管理速度。

相關詞條

熱門詞條

聯絡我們