分代垃圾收集如何运作?

Generational GC如何运作?
什么是Generational GC?

谢谢

维基百科的解释 。

世代GC(也称为短暂GC)将对象划分为几代,并且在大多数周期中,将仅将一代子集的对象放入初始白色(被谴责的)集合中。 此外,运行时系统通过观察引用的创建和覆盖来维护引用何时跨代的知识。 当垃圾收集器运行时,它可以使用这些知识来certificate初始白色集中的某些对象无法访问而无需遍历整个引用树。 如果世代假设成立,这将导致更快的收集周期,同时仍然回收大多数无法到达的对象。

基本上,它是一种启发式方法。 垃圾收集将新创建的对象放入内存区域(称为白色集 ),当此集合已满时,仍然引用的对象将移动到另一个区域,并清除白色集并使用新的新对象填充。 白色集是假设在那里找到的物体通常是不可达的。

有关JVM微调垃圾收集的进一步阅读。

简单地说,分代收集器管理日益寿命较长的对象的一系列区域中的内存。 这些领域被称为世代 。 最年轻的一代 – 有时称为伊甸园一代 – 由刚刚创建的对象组成。 它往往会看到很多变化 – 物体一直来自这一代。 老一辈的变化要少得多。 那是因为物体持续的时间越长,继续持续的可能性就越大。

分代收集器通过这种方式对内存进行分区来提高效率,因为它可以将大部分时间用于查看小型Eden代,并且它可以在大多数时间内忽略最老的代。 通过限制需要查看的内存量,收集器减少了它需要做的工作量。