【问题标题】:Is there any configuration for the garbage collector?垃圾收集器有什么配置吗?
【发布时间】:2010-05-20 12:07:08
【问题描述】:

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

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

【问题讨论】:

    标签: .net garbage-collection


    【解决方案1】:

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

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

    启发式的细节没有记录。但是,您可以从当今的软件算法文档出版社美国专利局收集一些背景信息。大多数微软的 GC 算法专利都归功于 Patrick Dussud,你可以通过谷歌查询他的名字轻松找到它们。这里是a relevant one

    【讨论】:

      【解决方案2】:

      不,运行时不记得它在运行期间学习到的以前的垃圾收集“设置”。

      您可以通过将以下内容放入配置文件中来配置并发垃圾回收:

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

      或者:

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

      gcServer 的完整文档可以在MSDN 中找到。

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

      【讨论】:

      • 其实是&lt;gcConcurrent&gt;元素。服务器 GC 是一种非常不同的算法。
      【解决方案3】:

      请参阅我的回答,其中包括对不同 GC 配置/模式的描述:

      Determining which garbage collector is running

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-30
        • 2019-11-08
        • 2011-11-17
        • 2015-12-17
        • 1970-01-01
        • 2011-09-28
        相关资源
        最近更新 更多