据我了解,垃圾收集器会在应用程序运行时自行调整,例如,随着时间的推移(根据MSDN)调整了托管堆上的对象时所使用的阈值。

如果应用程序崩溃,运行时是否会记住它以前的垃圾收集“设置”或任何其他设置?

最佳答案

是的,垃圾收集器算法中有一种启发式方法,可以自动调整分配策略。最明显的副作用是,随着程序运行并消耗内存,第0代堆大小不断增长。通常从2 MB开始,如果程序快速消耗内存,则可以达到〜8 MB。 Perfmon.exe中可见的性能计数器对此非常有用。

重点非常放在“自动”上,此代码的编写完全是假定程序员没有足够的信息来正确控制算法。唯一的“钩子(Hook)”是GC无法知道的东西,例如非托管内存使用情况(GC.AddMemoryPressure)或程序的角色(app.exe.config)。

启发式的详细信息未记录。但是,您可以从今天的出版社(美国专利局)中获取一些背景信息,以获取软件算法文档。微软的大部分GC算法专利都归功于Patrick Dussud,您可以通过用Google查询其姓名轻松找到它们。这是a relevant one

关于.net - 垃圾收集器有什么配置吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2873474/

10-11 16:17