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

时间:2019-01-18 07:43:34

标签: java jvm

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

enter image description here

1 个答案:

答案 0 :(得分:2)

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

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

  • 伊甸园
  • S0 + S1(统称为幸存者空间)。

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

  

Eden-> S0-> S1->老一代(或终身使用)。

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

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

请阅读以下内容: https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html