4

正如我们所知,当对象被创建时,它存储在新生代的伊甸园空间中,然后移动到幸存者空间(如果还活着),然后移动到老年代。

我的问题是——主要的垃圾回收是只清理老一代的对象,还是同时清理新老一代?

4

3 回答 3

4

HotSpot 中有 3 种类型的集合,用于并行和并发标记扫描。有一个次要集合,它只是伊甸园或伊甸园和幸存者空间。一个完整的集合就是一切,一个并发集合只是老一代。没有这样的主要收藏。完整集合一词更常用,其含义也更清晰。

G1收集器有老少两代,但只有一种收集类型,收集相对连续。它可能只清理 1 MB 或可能清理所有内存。

Azul JVM 在所有代中都是纯并发的。

于 2012-07-29T08:09:18.743 回答
1

对于热点 JVM:

  • Mark Sweep 紧凑型收集器(串行、并行清除、并行旧)在旧收集期间收集年轻人和老年人。如果旧空间大小不足,这些收集器可以切换到非分代模式(实际上只进行完整收集)。

  • Concurrent Mark Sweep old collection 只收集旧空间。但如果并发收集失败,它会退回到 Stop-The-World Mark Sweep Compact Full 收集并收集两个空间。

  • G1 有年轻集合和老集合。年轻的集合只收集年轻的空间。旧收集通常收集旧空间的一部分(G1 是增量的)。如果增量模式失败,它会退回到 Full GC 收集所有空间。

查看GC 开关备忘单以了解 JVM 配置选项。

于 2012-07-29T22:24:03.610 回答
1

当年轻代填满时,只执行该代的年轻代收集(有时称为次要收集)。当老代或永久代填满时,通常会完成所谓的完整收集(有时称为主要收集)。也就是说,收集所有代。

于 2013-01-12T16:08:11.347 回答