c# - 大对象堆和小对象堆的区别?

标签 c# garbage-collection

<分区>

我想澄清一个与 CLR 托管堆相关的问题。有 2 个对象管理堆——大对象堆和小对象堆。我知道大小超过 85kbytes 的对象将被放入 LOH。 SOH 有 3 代 (0,1,2)。 LOH 是 SOH(第 2 代对象)的一部分,还是包含始终是第 2 代对象的单独堆? LOH 是否应该与 SOH 的第 2 代对象一起清除?

最佳答案

Small Object Heap 有分代,不时检查。在收集结束时,这个堆是碎片化的,所以它需要被压缩。如果大对象在这个堆中,碎片整理将花费很长时间。因此,他们决定使用另一个堆 Large Object Heap 来免除这种昂贵的碎片整理操作。

真的是一本好书: ftp://support.red-gate.com/ebooks/under-the-hood-of-net-memory-management-part1.pdf

第 55 页 LOH

关于c# - 大对象堆和小对象堆的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18694453/

相关文章:

c - 在 C 中释放其他变量类型

c# - 生成类似图形性能图的 MRTG/RRD?

c# - 如何将比率存储在单个变量中并在 C# 中读回

c# - 具有设置间隔的 Ajax 或 SignalR

c# - 在 iOS 应用程序中访问 Microsoft Exchange Server Web 服务 (EWS) API

c# - 如何释放或回收 C# 中的字符串?

c# - 带闭包的无错误编码(在非纯虚拟环境中)

R:删除 ggplot2 对象不会释放空间?可能的内存泄漏?

memory - 使用自定义 Lua 分配器计算内存使用情况,但其结果与 collectgarbage ('count' 不同)

delphi - Delphi 中的第三方垃圾收集解决方案