我知道分代垃圾收集可以提高性能,因为
- 在非 Gen2 集合中,任何对象最多必须移动两次,Gen2 集合很少见。
- 如果系统正在执行 Gen0 收集,并且自上次 Gen0 收集以来尚未写入对象(Gen1 或 Gen2),则系统不必扫描该对象以标记其中的任何引用(因为它们都将是 Gen1或 Gen2)。同样,如果系统正在执行 Gen1 收集,它可以忽略自上次 Gen1 收集以来未写入的任何对象。由于垃圾收集的大部分工作是扫描对象,因此减少扫描时间是一个很大的胜利。
不过,我很好奇,从 Gen1 垃圾收集中省略大对象会有什么性能优势?大对象即使被垃圾收集器扫描也不会重新定位,我希望 Gen1 集合仍然必须扫描它们的内容,除非或直到两个连续的 Gen1 集合发生而没有干预对象写入。
是否有一些我没有看到的性能优势?