据我了解,垃圾收集器在应用程序运行时自行调整,例如,当收集管理堆上的对象时(根据MSDN),随着时间的推移调整了阈值。
如果应用程序崩溃,运行时是否记得以前的垃圾收集“设置”或任何其他设置?
答案 0 :(得分:8)
是的,垃圾收集器算法中有一个启发式方法,可以自动调整分配策略。最明显的副作用是看到gen 0堆大小随着程序运行和消耗内存而增长。通常从2 MB开始,如果程序快速消耗内存,它可以达到~8 MB。 Perfmon.exe中可见的性能计数器对此有好处。
重点在于“自动”,这段代码是用平坦的假设编写的,即程序员没有足够的信息可以正确地引导算法。唯一的“钩子”是GC无法知道的东西,比如非托管内存使用情况(GC.AddMemoryPressure)或程序角色(app.exe.config)。
没有记录启发式的详细信息。但是,您可以从今天的出版社收集一些背景信息,用于软件算法文档,美国专利局。微软的大部分GC算法专利都归功于Patrick Dussud,你可以通过谷歌查询他的名字轻松找到它们。这是a relevant one。
答案 1 :(得分:5)
不,运行时不记得它在运行期间学到的以前的垃圾收集“设置”。
您可以通过将以下内容放在配置文件中来配置并发垃圾回收:
<configuration>
<runtime>
<gcServer enabled="true"/>
</runtime>
</configuration>
或者:
<configuration>
<runtime>
<gcConcurrent enabled="false"/>
</runtime>
</configuration>
gcServer的完整文档可以在MSDN。
中找到gcConcurrent的完整文档可以在MSDN。
中找到答案 2 :(得分:1)
请参阅我的回答,其中包括以下各种GC配置/模式的说明: