垃圾回收器的几代是什么意思?

9

“垃圾收集器的代”在C#中是什么意思?这个概念和代表时间段的 GENERATION 不同吗?

1个回答

17

GC(垃圾回收)代指的是一个对象在垃圾回收中存活的次数。

所有的对象都开始于第 0 代。当进行一次垃圾回收时,如果第 N 代的对象无法被回收,它就会被移动到第 N+1 代。

代的概念用于优化垃圾回收性能。通常,第 0 代:

  1. 只占整个堆的很小一部分
  2. 有许多短生命周期的对象

因此,在进行垃圾回收时,垃圾收集器会首先收集第 0 代,这将非常快速。如果可以释放足够的内存,则无需查看较旧的代,因此回收可以迅速完成。

虽然关于该主题可写出大量书籍,但作为起点,本文此参考中提供了一些重要细节。


Driis:“不需要查看旧一代”是什么意思?我的理解是,如果有足够的内存,则不会查看第N代和N+1代,这正确吗?还是我漏掉了什么? - Rahul Tripathi
+1. @RahulTripathi,只有三代(0、1、2)在包含于集合中时具有特定的规则集。driis 提供的链接(和我所见过的任何文章)都详细介绍了每个世代的细节。 - Alexei Levenkov
@RahulTripathi 是的,正如Alexei所评论的那样,有0、1和2三代。第二代中的对象被认为是长寿对象。 - driis

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