Java 年轻一代的垃圾收集问题

Java 年轻一代的垃圾收集问题,java,garbage-collection,jvm,Java,Garbage Collection,Jvm,当伊甸园空间是年轻一代是满的,小GC将被触发。在次要GC过程中,伊甸园和一个源幸存者空间中的非自由对象将被复制到另一个目标幸存者空间 我的问题是,如果目标幸存者空间已满,minor GC如何处理?年轻一代有3个部分:伊甸园空间、幸存者1和幸存者2。这些只是年轻一代的逻辑划分。因此,对象从伊甸园空间复制到Survivor1,然后复制到Survivor2 所以,一般来说,小收集意味着收集发生在年轻一代。若年轻一代已满,那个么对象将被复制到老一代 同样,收藏的次要或主要取决于多个因素,其中之一是年轻一

当伊甸园空间是年轻一代是满的,小GC将被触发。在次要GC过程中,伊甸园和一个源幸存者空间中的非自由对象将被复制到另一个目标幸存者空间


我的问题是,如果目标幸存者空间已满,minor GC如何处理?

年轻一代有3个部分:伊甸园空间、幸存者1和幸存者2。这些只是年轻一代的逻辑划分。因此,对象从伊甸园空间复制到Survivor1,然后复制到Survivor2

所以,一般来说,小收集意味着收集发生在年轻一代。若年轻一代已满,那个么对象将被复制到老一代

同样,收藏的次要或主要取决于多个因素,其中之一是年轻一代的空间可用性。所以,如果年轻一代有足够的空间分配对象,那么它将是次要的集合。但是如果YG中没有足够的可用空间,那么同一个集合可以变成主要的


JVM规范也没有提到垃圾收集。因此,让JVM实现者有自己的策略。

如果不可能进行/完成次要收集,则执行主要/完整收集。这通常使用标记扫描压缩算法而不是复制算法来完成。。。这就是为什么全套服装价格昂贵的原因之一


但最终(如果您继续填充堆),完整的集合将无法回收足够的空间继续,并且将抛出OOME。(或者,如果您使用的是
-XX:+usegcoveredlimit
,则当在GC中花费的时间百分比超过指定阈值时,将抛出OOME。)

谢谢@Stephen!所以你的意思是如果一个小的集合被触发,并且在复制过程中间(从伊甸和幸存者空间)到另一个目的地生存空间,如果我们发现目的地幸存者空间是满的,次要的收集过程将被转换成一个完整的集合,对吗?是否有任何相关文件涵盖从次要收藏到主要/全部收藏的转换?1)这是我对发生的情况的理解。2) 很抱歉,我无法向您指出文档,但您可以阅读OpenJDK源代码来确认这一点。谢谢@rai.skumar。对于您的评论,“因此,如果年轻一代中有足够的空间用于对象分配,那么它将是次要收集。但如果YG中没有足够的可用空间,那么同一个收集可以变成主要收集。”这意味着即使在开始时触发次要收集,并且如果在次要收集过程中,如果年轻一代的空间不够,小收藏会变成大收藏吗?欢迎:)是的,你是对的。