经过多次的GC循环后,年轻一代中幸存下来的对象被移动到老一代的内存空间中。
请澄清,小GC对此负有责任吗?还是GC少校?
发布于 2016-10-08 13:35:18
对象可以在小GC (年轻空间)或完整GC (所有东西)中从年轻空间移动到终身空间。一个主要的GC集合只在固定的空间中收集。
较小的物体是在伊甸园空间中创建的,大的服从,例如在固定空间中的数组。
当伊甸园空间被清除后,幸存的物体被复制到幸存者空间中。它们在两个生还者空间之间来回复制,直到他们的年龄(复制次数)达到延长阈值,在这种情况下,它被复制到终身空间。
如果伊甸园空间中有太多的对象要复制到幸存者空间,则会触发一个完整的GC,并且所有活动对象都直接进入固定空间。
考虑到大小(survivorRatio)幸存者的大小将永远大于伊甸园
生存率是幸存者空间比伊甸园空间小多少。例如,-XX:SurvivorRatio=8意味着幸存者空间是年轻一代的十分之一。有两个幸存者空间(各为1/10),伊甸园空间是8倍(8/10)。
即使幸存者的空间比伊甸园要大,重要的是幸存者中自由空间的数量。例如,您可以拥有一个90%满的幸存者空间(因为它还有来自上一个N集合的对象)。
那么,如果对象的大小较小(而不是巨大的),那么是否会有这样的场景:对象直接从伊甸园复制到旧的?
如果您使幸存者空间足够小,每次触发一个完整的集合,对象将从伊甸园到终身。我不建议这么做。
发布于 2016-10-11 14:46:00
请澄清,小GC对此负有责任吗?还是GC少校?
他们中的任何一个都负责物体从年轻一代到老年一代的运动。
查看“通用垃圾收集过程”部分@ oracle 垃圾收集教程

摘要:
https://stackoverflow.com/questions/39932939
复制相似问题