據我瞭解,垃圾收集器會隨着應用程序的運行而自行調整,例如,當收集託管堆上的對象時,會隨着時間調整(根據MSDN)。垃圾收集器是否有配置?
如果應用程序崩潰,運行時是否記住它是以前的垃圾回收「設置」或其他設置?
據我瞭解,垃圾收集器會隨着應用程序的運行而自行調整,例如,當收集託管堆上的對象時,會隨着時間調整(根據MSDN)。垃圾收集器是否有配置?
如果應用程序崩潰,運行時是否記住它是以前的垃圾回收「設置」或其他設置?
是的,垃圾收集器算法中有一種啓發式方法,它可以自動調整分配策略。這種最明顯的副作用是隨着程序運行和消耗內存,看到第0代堆大小在增加。通常從2 MB開始,如果程序快速消耗內存,它可能會達到〜8 MB。在Perfmon.exe中可見的性能計數器對此很有幫助。
重點在於「自動」,這段代碼是用扁平化的假設編寫的,程序員沒有足夠的信息可供他們正確引導算法。唯一的「鉤子」是GC無法知道的東西,比如非託管內存使用(GC.AddMemoryPressure)或程序角色(app.exe.config)。
啓發式的細節沒有記錄。但是,您可以從今天的出版社收集軟件算法文檔的一些背景信息,即美國專利局。大多數微軟的GC算法專利都歸功於Patrick Dussud,您可以通過谷歌查詢名稱輕鬆找到他們。這裏是a relevant one。
請參考我的回答,其包括在不同的GC結構的說明/模式:
它是''元素實際上。服務器GC是一種非常不同的算法。 –
2010-05-20 13:59:55
我已將我的答案更新爲包含gcConcurrent。 – brickner 2010-05-20 15:11:23