首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是什么使对象从年轻一代迁移到老一代?

是什么使对象从年轻一代迁移到老一代?
EN

Stack Overflow用户
提问于 2016-10-08 13:28:07
回答 2查看 5.5K关注 0票数 8

经过多次的GC循环后,年轻一代中幸存下来的对象被移动到老一代的内存空间中。

请澄清,小GC对此负有责任吗?还是GC少校?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-08 13:35:18

对象可以在小GC (年轻空间)或完整GC (所有东西)中从年轻空间移动到终身空间。一个主要的GC集合只在固定的空间中收集。

较小的物体是在伊甸园空间中创建的,大的服从,例如在固定空间中的数组。

当伊甸园空间被清除后,幸存的物体被复制到幸存者空间中。它们在两个生还者空间之间来回复制,直到他们的年龄(复制次数)达到延长阈值,在这种情况下,它被复制到终身空间。

如果伊甸园空间中有太多的对象要复制到幸存者空间,则会触发一个完整的GC,并且所有活动对象都直接进入固定空间。

考虑到大小(survivorRatio)幸存者的大小将永远大于伊甸园

生存率是幸存者空间比伊甸园空间小多少。例如,-XX:SurvivorRatio=8意味着幸存者空间是年轻一代的十分之一。有两个幸存者空间(各为1/10),伊甸园空间是8倍(8/10)。

即使幸存者的空间比伊甸园要大,重要的是幸存者中自由空间的数量。例如,您可以拥有一个90%满的幸存者空间(因为它还有来自上一个N集合的对象)。

那么,如果对象的大小较小(而不是巨大的),那么是否会有这样的场景:对象直接从伊甸园复制到旧的?

如果您使幸存者空间足够小,每次触发一个完整的集合,对象将从伊甸园到终身。我不建议这么做。

票数 5
EN

Stack Overflow用户

发布于 2016-10-11 14:46:00

请澄清,小GC对此负有责任吗?还是GC少校?

他们中的任何一个都负责物体从年轻一代到老年一代的运动。

查看“通用垃圾收集过程”部分@ oracle 垃圾收集教程

摘要:

  1. 首先,任何新对象都分配给eden空间。两个幸存者空间都是空的。
  2. 当伊甸园空间被填满时,就会触发一个次要的垃圾回收。
  3. 被引用的对象被移动到第一个幸存者空间。清除伊甸园空间时,未引用的对象将被删除。
  4. 在下一个小GC中,eden空间也会发生同样的情况。未引用的对象被删除,引用的对象被移动到幸存者空间。然而,在这种情况下,它们被移动到第二个幸存者空间(S1)。
  5. 在下一个小GC中,相同的过程重复。然而,这一次幸存者空间切换。引用的对象被移动到S0中。幸存的物体都是老化的。伊甸园和S1都被清除了。
  6. 在一个小GC之后,当老化对象达到一定的年龄阈值(在本例中为8)时,它们将从年轻一代提升到老一代。
  7. 随着小规模GCs的继续出现,物体将继续被推广到老一代的空间。
  8. 最后,一个主要的GC将执行的老一代,清理和压缩的空间。
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39932939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档