我已经读到新一代存储新创建的对象,而终身代存储存在的对象。但是我怀疑编译器将如何知道该特定对象是否存活?何时将特定的对象放到终身制中?请指导我。

最佳答案

年轻一代分为3个空间。


一个伊甸园空间
两个幸存者空间


总共有3个空间,其中两个是幸存者空间。每个空间的执行过程顺序如下:


大多数新创建的对象位于Eden空间中。
在伊甸园空间中进行一次GC之后,将幸存的对象移动到其中一个幸存者空间。
在伊甸园空间中进行GC之后,将这些物体堆积到幸存者空间中,那里还存在其他幸存物体。
一旦幸存者空间已满,就将幸存的对象移动到另一个幸存者空间。然后,已满的幸存者空间将更改为完全没有数据的状态。
在这些步骤中幸存下来的对象(已重复多次)被移到了旧一代。


该信息取自this article。我建议您阅读它以加深了解。

07-25 22:40