天天看點

海洋工作室——網站建設專家:對C# 中堆棧,堆,值類型,引用類型的了解

1,什麼是GC

GC的全稱是garbage collection,中文名稱垃圾回收,是.net中對記憶體管理的一種功能。垃圾回收器跟蹤并回收托管記憶體中配置設定的對象,定期執行垃圾回收以回收配置設定給沒有有效引用的對象的記憶體。當使用可用記憶體不能滿足記憶體請求時,GC會自動進行。在進行垃圾回收時,垃圾回收器回首先搜尋記憶體中的托管對象,然後從托管代碼中搜尋被引用的對象并标記為有效,接着釋放沒有被标記為有效的對象并收回記憶體,最後整理記憶體将有效對象挪動到一起。這就是GC的四個步驟。

由上可見,GC是很影響性能的,是以一般說來這種事情況還是盡量少發生為好。

為了減少一些性能影響,.net的GC支援對象老化,或者說分代的概念,代是對象在記憶體中相對存現時期的度量機關,對象的代數或存現時期說明對象所屬的代。目前.net的垃圾回收器支援三代。每進行一次GC,沒有被回收的對象就自動提升一代。較近建立的對象屬于較新的代,比在應用程式生命周期中較早建立的對象的代數低。最近代中的對象位于零代中。每一次GC的時候,都首先回收零代中的對象,隻有在較低代數的對象回收完成後仍不能滿足需求的情況下才回收較高代數的對象。

2,讀文章,看到了一個關于堆和棧(堆棧)的差別的比喻。很形象:

使用棧就象我們去飯館裡吃飯,隻管點菜(發出申請)、付錢、和吃(使用),吃飽了就走,不必理會切菜、洗菜等準備工作和洗碗、刷鍋等掃尾工作,他的好處是快捷,但是自由度小。

使用堆就象是自己動手做喜歡吃的菜肴,比較麻煩,但是比較符合自己的口味,而且自由度大。