天天看點

CLR探索系列:Server and Workstation Garbage Collection探索(垃圾回收系列)

   首先推薦一本書:

Garbage Collection: Algorithms for Automatic Dynamic Memory Management (Hardcover)

   如果對GC的自動記憶體管理算法比較感興趣的話,可以參閱下這本書。在亞馬遜上的連結:

http://www.amazon.com/exec/obidos/ASIN/0471941484/qid=1030028976/sr=1-1/ref=sr_1_1/103-9503275-3854231

CLR中的GC,存在着兩種Mode。Server Mode的GC和Workstation Mode的GC。同時,在有些情況下,還會遇到并發的GC。

Server GC隻适合于在多CPU的主機上面使用。這種GC模式,為每一個處理器都獨立的建立一個GC Heap,這樣就可以進行并發的同步的收集。這樣做的好處也是顯而易見的:在相同的時間裡面可以處理更多的使用者請求。切實的帶來性能的成倍提升。同時,這中模式相對于在多處理器下使用并發模式更加的有效。

而Workstation Mode GC,它适合于單處理器的machine。同時它也是預設的GC模式。

這裡,還要說到一種并發式的GC,也就是在多處理器的machine上面配置的是Workstation Mode GC模式的時候GC的操作方式。在多處理器上面的應用程式運作的時候,它可以并發收集,來減少request的等待時間。這種模式,比較适合于有圖形使用者接口的應用程式或者是對實時性要求很高的系統。

對于Server GC的實作,是在MScorSvr.dll裡面的。而對于Workstation GC的實作,是封裝在MsCorWks.dll中的。知道了這些,對于判斷咱電腦上運作的是Server GC還是Wrokstation GC的判斷也比較簡單,用tasklist指令就可以了:

>tasklist /m mscorwks.dll

Image Name                       PID        Modules

OUTLOOK.EXE               3352       mscorwks.dll

mmc.exe                             2084       mscorwks.dll

w3wp.exe                           3436       mscorwks.dll

或者,也可以到管理工具中檢視系統配置。控制台裡面的管理工具,然後打開Microsoft .NET Framework 2.0 Configuration。檢視我的電腦的屬性:

CLR探索系列:Server and Workstation Garbage Collection探索(垃圾回收系列)

    預設情況下的配置,就是使用Wrokstation GC。

       另外一個比較特别也比較普遍的使用方式,就是在一個非宿主托管應用程式,也就是一個使用者App,的配置檔案裡面,可以手工的增加一個配置節點來改變這個GC的mode:

<configuration>

  <runtime>

    <gcServer enabled="true" />

  </runtime>

</configuration>

這裡,需要特别指出來一下,這裡說明的是非寄宿的應用程式。如果運作的應用程式是Hosted,這個時候,host的對于GC的配置,就會覆寫這個.config檔案裡面關于GC模式的配置。

在配置使用這些模式的時候,如果是單處理器的machine,就使用Workstation GC。如果是多處理器的時候,如果是看中整個系統的吞吐量,就可以使用Server GC。如果是看中整個系統的實時響應特征,則可以選擇并發模式的GC。

繼續閱讀