天天躁日日躁狠狠躁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垃圾收集機制(拾貝篇),轉載需保留來源!

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

主站蜘蛛池模板: 欧美国产在线一区 | 美女被C污黄网站免费观看 美女白虎穴 | 91欧美秘密入口 | 和搜子的日子 在线观看 | 色戒在线完整观看在线播放版 | 97国内精品久久久久久久影视 | 久久免费看少妇高潮A片特爽 | 色多多涩涩屋下载软件 | 亚洲欧美日韩一级特黄在线 | h片下载地址 | 能看的黄页最新网站 | 色妞色视频一区二区三区四区 | 免费视频网站嗯啊轻点 | 麻豆国产99在线中文 | 美女国产毛片A区内射 | 亚洲日韩天堂在线中文字幕 | 国产欧美一区二区精品仙草咪 | 无遮掩H黄纯肉动漫在线观看星 | 超碰在线视频人人AV | 奇米狠狠干| 好吊妞在线成人免费 | 欧美 日韩 无码 有码 在线 | 秋霞成人午夜鲁丝一区二区三区 | 欧美 亚洲综合在线一区 | 国产爱豆剧果冻传媒在线 | 美女脱精光让男生桶下面 | 国产成人精品综合在线观看 | 久久精品电影久久电影大全 | 女人被弄到高潮叫床免 | 国产精品悠悠久久人妻精品 | 国产精品手机在线视频 | 国产无遮挡又黄又爽在线视频 | 国产学生在线播放精品视频 | 成人午夜精品久久久久久久秋霞 | 久久秋霞理伦片 | 啦啦啦 中文 中国 免费 高清在线 | 最新无码国产在线视频2020 | 99热这里只有精品6 99热这里只有精品 99热这里只有的精品 | 亚洲高清国产拍精品5g | 最近中文字幕完整版免费高清 | 久久影院午夜理论片无码 |