我知道当Age大于MaxTenuringThreshold时,长期的幸存者将进入终身制。但是我读过的一本书也说,当Survivor空间中相同年龄的所有物体的大小都大于Survivor空间的一半时那么问题是这个幸存者空间是SO还是S0 + S1?为什么不使用Eden + S0或S1?

java - 长期幸存下来的老一代人将生存多久?-LMLPHP

最佳答案

该图有些偏离-永久代不存在于堆中,而是存在于非堆空间中:
https://blogs.oracle.com/jonthecollector/presenting-the-permanent-generation

为了回答您的问题,年轻一代由以下人员组成:


伊甸园
S0 + S1(统称为生存空间)。


堆中的对象具有一定程度的“提升”,如下所示:
`


  伊甸园-> S0-> S1->老一代(或终身使用)。


在具有固定分配大小的Eden中创建新的Java对象。自然,会有一段时间伊甸园已满,并且发生了一轮次要GC。仍然引用的对象将被提升到幸存者空间。随着每个次要GC的出现,对象将围绕S0和S1交换。

根据该对象幸存的GC次数,它最终将被提升为“旧世代”。当然,也将会出现旧时代空间将满的时候。然后将执行大型GC清理未引用的对象。

读一读:
https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

关于java - 长期幸存下来的老一代人将生存多久?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54249619/

10-10 02:50