垃圾收集器是否有配置?
问题描述:
据我了解,垃圾收集器会随着应用程序的运行而自行调整,例如,当收集托管堆上的对象时,会随着时间调整(根据MSDN)。垃圾收集器是否有配置?
如果应用程序崩溃,运行时是否记住它是以前的垃圾回收“设置”或其他设置?
答
是的,垃圾收集器算法中有一种启发式方法,它可以自动调整分配策略。这种最明显的副作用是随着程序运行和消耗内存,看到第0代堆大小在增加。通常从2 MB开始,如果程序快速消耗内存,它可能会达到〜8 MB。在Perfmon.exe中可见的性能计数器对此很有帮助。
重点在于“自动”,这段代码是用扁平化的假设编写的,程序员没有足够的信息可供他们正确引导算法。唯一的“钩子”是GC无法知道的东西,比如非托管内存使用(GC.AddMemoryPressure)或程序角色(app.exe.config)。
启发式的细节没有记录。但是,您可以从今天的出版社收集软件算法文档的一些背景信息,即美国专利局。大多数微软的GC算法专利都归功于Patrick Dussud,您可以通过谷歌查询名称轻松找到他们。这里是a relevant one。
它是''元素实际上。服务器GC是一种非常不同的算法。 –
2010-05-20 13:59:55
我已将我的答案更新为包含gcConcurrent。 – brickner 2010-05-20 15:11:23