大对象堆和小对象堆的区别是什么?

3

我想澄清一下CLR托管堆的一个问题。有两个对象托管堆 - 大对象堆和小对象堆。我知道大小超过85k字节的对象将被放入LOH。SOH有三代(0、1、2)。LOH是SOH(第二代对象)的一部分,还是一个与始终为第二代的对象分开的堆?LOH应该与SOH的第二代对象一起清除吗?


它们是分开的。LOH 与 Gen2 一起被收集。这就是你要澄清的吗? - Simon Whitehead
1个回答

6
小对象堆具有定期检查的代。在收集结束时,此堆会出现碎片,因此需要进行压缩。如果大对象在此堆中,则对于碎片整理操作需要花费很长时间。因此,他们决定拥有另一个堆——大对象堆,它将免除这种昂贵的碎片整理操作。
有一本非常好的书: ftp://support.red-gate.com/ebooks/under-the-hood-of-net-memory-management-part1.pdf 第55页是关于LOH的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接