1. <bdo id="8zfej"></bdo>
    <li id="8zfej"><meter id="8zfej"><th id="8zfej"></th></meter></li>

    南京中博教育

    全國咨詢電話:17368476151

    三分鐘了解中博教育
    當前位置:南京中博教育 > 學習園地 > 編程技巧

    基礎知識:CLR垃圾回收器采用代(generation)機制,目前支持0、1、2三代。

    來源:未知? ? ? 作者:wxs ? ??

    基礎知識:CLR垃圾回收器采用代(generation)機制,目前支持0、1、2三代。 1、新構造添加到堆的對象稱為第0代。 2、經過對第0代的垃圾回收之后,第0代的幸存者被提升至第1代。 3、經過對
    基礎知識:CLR垃圾回收器采用代(generation)機制,目前支持0、1、2三代。
     
    1、新構造添加到堆的對象稱為第0代。
     
    2、經過對第0代的垃圾回收之后,第0代的幸存者被提升至第1代。
     
    3、經過對第1代的垃圾回收之后,第一代的幸存者被提升至第2代。
     
    CLR初始化時,會為每一代選擇預算。第0代的預算約為256K,第1代預算約2M,第2代預算約10M。在實際使用過程中,垃圾回收器會用類似啟發式算法調整各代的預算。
     
    實例:該實例運行在.NET4.0環境
     
    View Code
     
     
    運行結果:
     
     
     
    問題提出:
     
    1、為什么table、list、sb都為2代對象?
     
    程序的開始創建了StringBuilder的實例sb和DataTable的實例table,由GC.GetGeneration(table)方法可知table和sb這兩個對象在剛創建之后屬于第0代。
    當通過for循環為table添加數據時很快超出了第0代256K內存的預算,這個時候CLR會啟動一次垃圾回收,垃圾回收器檢測內存中的sb對象,發現sb對象被后面的Console.WriteLine("SB代數:" + GC.GetGeneration(sb));引用,所以沒被回收。由于table占有的內存迅速增加,并且在經過一次垃圾回收后sb幸存下來,所以此時sb和table都被提升到1代。0代內存空出來。
    1代的內存預算是2M,從運行結果可以看出終table占有的內存為3.5M,也就是說table的數據增加也會超出1代內存預算。在1代內存預算快被超出的時候,CLR啟動垃圾回收器,檢查第1代和第0代中的所有對象。但發現sb對象仍然被引用,沒被回收,所以sb對象在回收第1代和第0代的回收之后幸存下來,所以sb對象被提升到第2代。Table對象由于超過1代的內存預算,也被提升到第2代。1代內存空出來。
    同理也可以得出list對象由于超出1代的內存預算被提升到2代。在這個實例中如果把list的for循環調整到2000000時,會導致OutOfMemoryException異常。因為list占用的內存迅增加,垃圾回收器執行一次完整的回收之后還不能滿足list的需要,所以拋出OutOfMemoryException異常。
      對象被提升到2代這個過程中,會多次啟動垃圾回收器,對性能有一定的影響,并且由于table和list的數據量比較大,同時也成為大對象。回收大對象損失的性能更多。在這個實例中,從運行結果可以看出2000條的數據量table占用的內存比list占用的內存多340K,這個數量比0代的內存預算還要大。
     
    建議:
     
    1、在項目開發中,如果底層不需要用到DataTable自帶的一些功能(如select(),compute()等方法),而只是用來數據傳輸,個人建議采用List<T>的方式。因為它占用的內存比DataTable小,同時在list被回收時性能損失更小。
     
    2、如果對象有可能為大對象,可以使用GC.GetTotalMemory(true)方法來測定。評估之后可能會成為大對象則建議分割該對象或者采用非托管方式(可以啟用unsafe)。

    分享到:

    相關閱讀:

    近期文章

    搶試聽名額

    名額僅剩66名

    教育改變生活

    WE CHANGE LIVES

    主站蜘蛛池模板: 伊人久久大香线蕉综合Av| 六月婷婷国产精品综合| 国产成人精品综合久久久| 伊人色综合久久大香| 亚洲综合久久久久久中文字幕| 久久综合九色综合97免费下载| 亚洲狠狠成人综合网| 久久九九精品国产综合喷水 | 亚洲综合色自拍一区| 亚洲国产综合第一精品小说| 五月婷婷开心综合| 一本一道久久综合久久| 亚洲综合成人网在线观看| 色综合视频一区二区三区44| 久久99国产综合精品| 国产成人精品综合久久久久| 色九月亚洲综合网| 亚洲综合无码无在线观看| 青青热久久综合网伊人| 国产综合在线观看| 五月婷婷久久综合| 亚洲综合色视频在线观看| 久久天堂av综合色无码专区| 亚洲综合图片小说区热久久| 亚洲综合一区二区国产精品| 婷婷久久香蕉五月综合加勒比| 一本色道久久88亚洲综合| 人人婷婷色综合五月第四人色阁 | 国产综合激情在线亚洲第一页| 色欲久久久天天天综合网| 在线亚洲97se亚洲综合在线| 五月综合色婷婷在线观看 | 色噜噜狠狠狠综合曰曰曰| 国产成人综合精品一区| 狠狠色丁香久久婷婷综合五月| 亚洲综合色成在线播放| 亚洲综合一区二区精品导航| 色婷婷综合和线在线| 人人狠狠综合久久亚洲高清| 激情五月综合综合久久69| 亚洲情综合五月天|