gpt4 book ai didi

.net - 将对象固定在 LOH 中是否会影响 GC 性能?

转载 作者:行者123 更新时间:2023-12-02 19:40:57 26 4
gpt4 key购买 nike

我读到,在托管堆中固定对象会影响 .NET 中的 GC 性能,因为如果“妨碍”固定对象,GC 就无法压缩内存。但由于大型对象堆无论如何都不会被压缩,因此这不适用于 LOH 中的对象。固定 LOH 中的对象是否还有其他隐藏成本?或者我可以安全地将对象固定在 LOH 中而不降低 GC 性能吗?

最佳答案

好吧,仅仅因为大对象堆 (LOH) 未压缩并不意味着它未被收集The LOH is collected并将对象固定在那里将对 future 的分配产生影响。

由于对象被固定,它会有效地缩小 LOH 中的可用内存量(与持有引用时的情况相同)。当发出另一个分配大对象的请求时,如果 LOH 中有太多固定/保留的引用,则在分配更多大对象时可能会遇到问题。

当在垃圾收集的标记和清除部分完成标记时,CLR 可能会标记所有固定为根的引用,因此在这部分收集期间可能不会产生任何影响;如果有人保留对大对象的引用,它的行为也会相同。

由于释放在 LOH 上以相同的方式发生(该 block 被简单地标记为可用),因此此操作也不会受到影响。

最后,由于 LOH 未压缩,因此在 GC 期间此操作永远不会在此堆上发生,因此此处不会受到影响。

总之,LOH 上的分配肯定会受到对 LOH 上对象的固定引用的影响,而 LOH 上的集合很可能不会。

虽然我们不要忘记分配和持有大内存块通常会对系统产生影响,但这些评论严格来说是关于 LOH

关于.net - 将对象固定在 LOH 中是否会影响 GC 性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7121518/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com