主要垃圾收集是否从两代收集对象?

时间:2012-07-29 07:43:14

标签: java garbage-collection

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

我的问题是 - 主要的垃圾收集是否只清理旧一代的对象或清理新老一代?

3 个答案:

答案 0 :(得分:4)

HotSpot for Parallel和Concurrent Mark Sweep中有三种类型的集合。有一个小集合,只是伊甸园或伊甸园和幸存者空间。一个完整的集合,这是一切,和一个只有老一代的并发集合。没有主要的收藏品。完整收集这个术语更经常使用,更清楚其含义。

G1收藏家有两代年轻人和老年人,但只有一个收藏类型,并有相对连续的收藏。它可能只清理1 MB或可能是所有内存。

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

答案 1 :(得分:1)

对于HotSpot JVM:

  • Mark Sweep紧凑型收藏家(Serial,Parallel scavenge,Parallel old)在旧收藏期间收集年轻人和老年人。 如果旧空间大小不足,这些收集器可以切换到非世代模式(实际上只进行完整收集)。

  • Concurrent Mark Sweep旧集合仅收集旧空间。但是如果并发收集失败,它会回到Stop-The-World Mark Sweep Compact Full系列并收集两个空格。

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

查看GC switches cheatsheet的JVM配置选项。

答案 2 :(得分:1)

  

当年轻一代填满时,会进行这一代的年轻一代收藏(有时被称为次要收藏)。当旧的或永久的一代填满时,通常完成所谓的完整集合(有时称为主要集合)。也就是说,收集所有世代。