【问题标题】:Default strategy for large object heap compaction大对象堆压缩的默认策略
【发布时间】:2019-04-24 00:48:59
【问题描述】:

.NET 框架默认使用什么策略来压缩大对象堆?

  • 从不压缩
  • 一段时间后压缩(不像分代堆那么积极)

什么是有效的?如果是“一段时间后”,是否有一些关于“多久”或“何时”的细节?

(我对高于 4.5 的 .NET 框架版本感兴趣)

【问题讨论】:

  • 哪些文本?这有助于了解我们的反应。

标签: .net garbage-collection large-object-heap


【解决方案1】:

默认情况下,LOH 根本不会被压缩。因为那可能很贵。

从 4.5.1 开始,您可以使用 GCSettings 来更改它。选择是 CompactOnce 和 Never。

所以你可以manually trigger 一个压缩,由你的应用程序逻辑驱动。

LOH 仅在第 2 代收集期间收集(清扫)。这可能会导致您“一段时间后”的困惑。但是收集不是压缩。

【讨论】:

  • 谢谢。但是您的措辞表明 GCSettings.LargeObjectHeapCompactionMode 是永久设置的,而它只是一次分配,并且将在下一次阻塞 GC 后重置。 docs.microsoft.com/en-us/dotnet/api/…。我觉得你应该说清楚。
  • 是的,它只对一个收集器有效。这就是我手动的意思。
猜你喜欢
  • 2021-10-19
  • 1970-01-01
  • 2021-05-05
  • 1970-01-01
  • 2018-12-05
  • 2016-05-06
  • 2014-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多