我一直在调查一个c#服务器应用程序中的一些垃圾收集问题。我目前正在使用PerfView来做这件事。在收集了一些数据并获得了大量的GC统计数据后,我对其中一列的“触发原因”感到有点困惑。我得到两个值'AllocLarge‘和'AllocSmall’。我已经搜索了帮助和谷歌,但找不到这两个术语的确切含义。
发布于 2012-11-13 02:30:52
.NET GC对待大于85K的对象(大对象)的方式与对待其他对象(小对象)的方式非常不同。特别是,大型对象仅在“第2代”(最昂贵的GC类型)中收集。'AllocLarge‘表示在分配大对象时触发了GC (因此必须触发了第二代GC)。“AllocSmall”表示在响应“普通”对象的分配时发生的GC。
请注意,一般来说,拥有寿命较短的大对象是不好的(因为这些对象会强制使用昂贵的GC)。通过查看“GC Alloc”视图并查找伪帧“LargeObject”,您可以看到分配了大型对象的所有地方。双击它(这会把你带到'callers‘视图,然后你会看到你正在分配大对象的位置。
https://stackoverflow.com/questions/12911323
复制相似问题