2010-05-20 367 views
1

據我瞭解,垃圾收集器會隨着應用程序的運行而自行調整,例如,當收集託管堆上的對象時,會隨着時間調整(根據MSDN)。垃圾收集器是否有配置?

如果應用程序崩潰,運行時是否記住它是以前的垃圾回收「設置」或其他設置?

回答

6

是的,垃圾收集器算法中有一種啓發式方法,它可以自動調整分配策略。這種最明顯的副作用是隨着程序運行和消耗內存,看到第0代堆大小在增加。通常從2 MB開始,如果程序快速消耗內存,它可能會達到〜8 MB。在Perfmon.exe中可見的性能計數器對此很有幫助。

重點在於「自動」,這段代碼是用扁平化的假設編寫的,程序員沒有足夠的信息可供他們正確引導算法。唯一的「鉤子」是GC無法知道的東西,比如非託管內存使用(GC.AddMemoryPressure)或程序角色(app.exe.config)。

啓發式的細節沒有記錄。但是,您可以從今天的出版社收集軟件算法文檔的一些背景信息,即美國專利局。大多數微軟的GC算法專利都歸功於Patrick Dussud,您可以通過谷歌查詢名稱輕鬆找到他們。這裏是a relevant one

5

不,運行時不會記住它在運行過程中學到的以前的垃圾回收「設置」。

什麼,你可以配置爲併發垃圾回收將通過配置文件中的以下內容:

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

或者:

<configuration> 
    <runtime> 
     <gcConcurrent enabled="false"/> 
    </runtime> 
</configuration> 

爲gcServer全部文檔可以在MSDN找到。

gcConcurrent的完整文檔可在MSDN中找到。

+0

它是''元素實際上。服務器GC是一種非常不同的算法。 – 2010-05-20 13:59:55

+0

我已將我的答案更新爲包含gcConcurrent。 – brickner 2010-05-20 15:11:23