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