![]() |
1
47
CLR使用LOH预先分配一些对象(例如 the array used for interned strings )。其中一些少于85000字节,因此通常不会在LOH上分配。
同样由于一个有点深奥的优化,任何
|
![]() |
2
13
NET Framework 4.5.1能够在垃圾收集期间显式压缩大型对象堆(LOH)。
请参阅中的更多信息 GCSettings.LargeObjectHeapCompactionMode |
![]() |
3
2
如果这就是实际发生的情况,那么它将解释小物体如何最终与LOH在同一个地方——如果它们的寿命足够长,可以在第二代中结束。 因此,你的问题似乎是对我想到的想法的一个很好的反驳——它将导致LOH的分裂。 能够
更新:
产量
|
![]() |
4
1
一旦你确定是什么产生了这些字符串,试着找出是什么阻止了它们被GCD。也许它们被塞进了一个被遗忘或未使用的列表中,用于日志记录或类似的目的。
|
![]() |
5
1
好问题,我通过阅读问题来学习。
考虑到.net垃圾回收器的性能,仅让反序列化代码路径创建普通字符串对象可能就足够了。在证明需要之前,不要做任何更复杂的事情。 我最多只想保存一个包含您看到的最后几个字符串的哈希表,并重用这些字符串。通过限制哈希表大小并在创建表时传入大小,可以停止大部分碎片。然后需要一种方法从哈希表中删除最近未看到的字符串,以限制其大小。 但是,如果反序列化代码路径创建的字符串无论如何都是短期的,那么您将得不到多少好处。 |
![]() |
6
1
这里有两种方法来确定确切的 call-stack LOH 分配。 为了避免LOH碎片,预先分配大量对象并固定它们。在需要时重用这些对象。这是 post 关于LOH碎片化。类似这样的东西可以帮助避免LOH碎片化。 |
![]() |
7
1
|
![]() |
A.Pet · 回收时将调试器附加到应用程序池 7 年前 |
![]() |
Dominique · 如何避免将DbgCommand命令写入日志文件 7 年前 |
![]() |
Ralph Erdt · WinDBG显示不完整堆栈 7 年前 |
![]() |
NoBrassRing · Windbg快捷方式将EIP设置为源行 8 年前 |
![]() |
Ghita · Windows堆分配调用堆栈-奇怪的调用堆栈 10 年前 |