【问题标题】:What is "normal" for generation heap sizes for the CLR GC?CLR GC 的生成堆大小“正常”是多少?
【发布时间】:2014-12-23 14:20:19
【问题描述】:

这个问题可能没有答案。

分析一些代码,我注意到 Gen1 堆大小为 250MB,然后在单个 Gen0 收集之后,它上升到 518MB。 所以 Gen0 在收集之前达到了 250MB。

我一直认为 Gen0 和 Gen1(尽管它们不是固定的并且可以变化)比这要小得多。

对于不同世代的预期尺寸范围,我们有什么可以说的吗?

(这是在一台具有 8GB Ram、.Net 4.5.2 的机器上的 Workstation GC 下。我们实际上是在 MSTest / QTAgent 下测量代码,这可能会影响 GC 的执行方式)

【问题讨论】:

    标签: .net garbage-collection clr .net-4.5


    【解决方案1】:

    我搜索了一下,发现很多关于每一代初始大小的声明,但每个声明的数字不同。可以安全地假设它从低开始并且根据分配和收集而改变大小。但你已经知道了。

    没有什么能比得上“正常”的世代大小。如果您分配了许多小对象并且不让它们存活太久,那么 Gen0 的大小会保持较小,并且会更频繁地进行收集,但速度会非常快。但是,如果您分配的对象较少但大小较大,则 Gen0 的大小可能会增加,并且收集的发生频率会降低。

    无论如何,您应该担心这些数字的情况并不多。如果您想分析这些代如何改变它们的大小,请运行 DotTrace 之类的程序并观察之前大小的增加,也许您将能够分辨出是什么方法/调用链/......导致了它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-30
      • 2019-10-20
      • 1970-01-01
      • 2017-09-30
      • 2010-12-07
      • 2012-09-19
      • 2012-07-03
      • 2014-01-11
      相关资源
      最近更新 更多