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永久综合在线观看尤物 | 一本色道久久综合狠狠躁| 亚洲综合校园春色| 久久综合久久伊人| 国产精品亚洲综合| 亚洲人成依人成综合网| 卡通动漫第一页综合专区| 亚洲欧洲自拍拍偷综合| 狠狠色丁香婷婷综合激情| 九色综合九色综合色鬼| 在线综合亚洲欧洲综合网站| 久久婷婷激情综合色综合俺也去| 国产成人综合野草| 亚洲av日韩综合一区久热| 一本色道久久综合无码人妻 | 久久天天躁狠狠躁夜夜躁综合| 丁香婷婷激情综合俺也去| 亚洲综合色7777情网站777| 久久婷婷成人综合色| 国产精品国色综合久久| 狠狠色丁香久久婷婷综合| 国产成人精品综合在线观看| 日韩综合在线视频| 制服丝袜人妻综合第一页| 一本久道综合色婷婷五月| 综合五月激情二区视频| 亚洲a无码综合a国产av中文| 国产精品无码久久综合网| 一本色道久久88亚洲综合| 久久影视综合亚洲| 日本伊人色综合网| 亚洲国产综合AV在线观看| 国产综合在线观看视频|