中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

.NET Discovery 系列之七--深入理解.NET垃圾收集機制(拾貝篇)

系列文章導航:

.NET Discovery 系列之一--string從入門到精通(上)

.NET Discovery 系列之二--string從入門到精通(勘誤版下)

.NET Discovery 系列之三--深入理解.NET垃圾收集機制(上)

.NET Discovery 系列之四--深入理解.NET垃圾收集機制(下)

.NET Discovery 系列之五--Me JIT(上)

.NET Discovery 系列之六--Me JIT(下)

.NET Discovery 系列之七--深入理解.NET垃圾收集機制(拾貝篇)


  關于.NET垃圾收集器(Garbage Collection),Aicken已經在“.NET Discovery 系列”文章中有2篇的涉及,這一篇文章是對上2篇文章的補充,關于“.NET Discovery 系列”文章索引請見本文結尾。

  第一節.垃圾回收算法與完整收集(Full GC)

  垃圾收集器就是跟蹤所有被引用到的對象,整理對象不再被引用的對象,回收相應的內存,它使用“標記與清除”算法,分兩步回收對象:

  Step 1.Mark-Sweep :從應用程序的root出發,利用相互引用關系,遍歷其在Heap上動態分配的所有對象,指明需要回收的對象,標記出那些存活的對象,予以標記。

  Step 2.Compact: 對內存中存活的對象進行移動,修改它們的指針,使之在內存中連續,這樣空閑的內存也就連續了,即完成了內存釋放工作,也解決了內存碎片問題,這個過程也可以成為指針的壓縮。

  垃圾收集器一般將托管堆中的對象分為3代,這可以通過調用GC.MaxGeneration得知,對象按照存在時間長短進行分代,最短的分在第0代,最長的分在第2代,第2代中的對象往往是比較大的,第二代空間被稱作Large Object Heap,對于2代對象的回收,與第0、1代回收方式相比最大的不同在于,沒有了指針移動的壓縮過程。

      

圖1 對象的回收

  如上圖所示,左邊的區域為第一次GC時的結構,需要注意的是GC標記的是那些存活的對象,而不是需要回收的,所以第一次回收,對象B、D沒有被標記,所以被回收了,之后GC移動了對象內存指針,使空間連續。

  接下來看中間的部分,第二次GC開始了,C對象沒有被標記,所以被回收了,接下來A、D、F三個對象被壓縮,形成連續的內存空間,并且形成了第1、2、3代區域。

  接下來看最右邊的部分,D對象沒有被標記,由于D對象處于第2代中,所以回收D對象后,GC沒有啟動壓縮步驟,因為對于大對象的指針移動,資源耗費成本很高。

  對于第2代的GC稱為Full GC,新分配的對象在第0代(0代空間最大長度通常為256K),按地址順序分配,它們通常是一些局部變量;第1代(1代空間最大長度通常為2 MB)是經過0代垃圾收集后仍然駐留在內存中的對象,它們通常是一些如表單,按鈕等對象;第2代是經歷過幾次垃圾收集后仍然駐留在內存中的對象,它們通常是一些應用程序對象。

  可見一次Full GC需要的資源是最多的,可能是幾秒或十幾秒。

  托管堆的內存分配以段(Segment)為單位,CLR啟動時通常為GC Heap創建2個段,分別用來存儲第0、1代對象和第2代對象,以下是通過Windbg工具查看到的GC Heap情況:

圖2 WinDbg 查看GC Heap情況

  可以看出,GC堆被分成了兩個段,三代,每代起始地址十進制差值為12。

  在理解方面需要注意的是,GC回收的是程序中的引用類型,值類型是保存在堆棧之中,當值類型對象出了作用域后會自動釋放內存----即彈棧,不需要垃圾收集器管理。

  第二節.GC的工作模式

  GC的工作模式分3種,Workstation GC with Concurrent GC off、 Workstation GC with Concurrent GC on、Server GC ,在.NET 2.0以上版本可以通過修改Config文件來改變GC工作模式,例如啟用Server GC:

<configuration> 
<runtime>
<gcServer enabled="true" />
</runtime>
</configuration>

NET技術.NET Discovery 系列之七--深入理解.NET垃圾收集機制(拾貝篇),轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 伊人狠狠干| 成人免费激情视频 | 中文字幕在线观看一区 | 国产精品美女久久久久久免费 | 7777在线视频 | 国产成年人小视频 | 人人九九精 | 欧美不卡| 国产精品久久久久久久久久久久冷 | 中文字幕日本一区二区 | 久久国产精品-国产精品 | 欧美日韩一区在线观看 | 国产真实乱全部视频 | 欧美激情综合网 | 久久久成| 欧美视频成人 | 波多野结衣二区 | 在线看一区二区 | 久久99蜜桃综合影院免费观看 | 亚洲精品第一国产综合野 | 激情久久网 | 午夜播放器在线观看 | 国产精品久久久久无码av | 国产精品国产三级国产aⅴ中文 | 国产欧美在线 | 91精品久久久久久久久久 | 九色 在线 | 国产精品99久久久久久久久久久久 | 91国内精品久久 | 久久蜜桃av一区二区天堂 | 91社区在线观看播放 | 国产1区2区在线观看 | 蜜桃久久 | 亚洲第一网站 | 免费看一级毛片 | 成人精品一区二区三区中文字幕 | 91久久久久久久久久久 | 国产高清免费视频 | 久草在线中文888 | 五月婷婷视频 | 日本韩国欧美在线观看 |