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。查看我的電腦的屬性:
默認情況下的配置,就是使用Wrokstation GC。
另外一個比較特別也比較普遍的使用方式,就是在一個非宿主托管應用程序,也就是一個用戶App,的配置文件里面,可以手工的增加一個配置節點來改變這個GC的mode:
<configuration>
<runtime>
<gcServer enabled="true" />
</runtime>
</configuration>
這里,需要特別指出來一下,這里說明的是非寄宿的應用程序。如果運行的應用程序是Hosted,這個時候,host的對于GC的配置,就會覆蓋這個.config文件里面關于GC模式的配置。
在配置使用這些模式的時候,如果是單處理器的machine,就使用Workstation GC。如果是多處理器的時候,如果是看中整個系統的吞吐量,就可以使用Server GC。如果是看中整個系統的實時響應特征,則可以選擇并發模式的GC。
posted on 2008-02-27 13:42 lbq1221119 閱讀(3402) 評論(6) 收藏 舉報
浙公網安備 33010602011771號