年轻一代的规模将如何调整



我试图理解用于定义JVM堆大小的不同参数。

<jdkarg value="-Xmx20000M"/>
<jdkarg value="-Xms10000M"/>
<jdkarg value="-XX:NewSize=2500M"/>
<jdkarg value="-XX:NewRatio=1"/>
<jdkarg value="-XX:MaxNewSize=5000"/>

在这里,我知道这些jdkarg的含义,是什么让我感到困惑,我在某个地方读到,如果我定义了-XX:NewSize-XX:NewRatio,那么jvm将使用XX:NewSize而不是

/XX:NewRatio所以这里我有一些关于这个的问题:

  • 当我们定义-XX:NewSize-XX:NewRatio时,初始年轻一代大小将使用XX:NewSize定义,这是正确的吗
  • 当堆大小增加到最大值(在这种情况下为20000M)时会发生什么,那么它如何定义年轻一代的最大大小,它会使用-MaxNewSize还是-XX:NewRatio,或者它们都不会像我使用-XX:NewSize那样使用

我试了很多谷歌搜索,但没有找到任何结论。如果能帮助我们一起理解这些隐语,我们将不胜感激。

更新:

我得到的输出不是预期的:

S0C       S1C      S0U     S1U      EC       EU        OC         OU         PC       PU       YGC    YGCT   FGC      FGCT    GCT
426624.0 426624.0  0.0   426624.0 1706752.0 1013097.7 17920000.0 7208855.8  137032.0 82118.0   1952  130.126  24     20.441  150.567

在这里,我得到的旧空间为17920000,即17500 MB,年轻空间

当我们定义-XX:NewSize和-XX:NewRatio时,初始young生成大小将使用-XX:NewSize定义,正确吗?

NewRatio如果与NewSizeMaxNewSize一起使用,则会被忽略

当堆大小增加到最大值时会发生什么?在这种情况下为20000M,那么它是如何定义年轻一代的最大尺寸的,它会使用-MaxNewSize吗或者-XX:NewRatio,或者它们都不会像我一样使用-XX:NewSize?

当同时使用NewSizeMaxNewSize时,年轻一代将介于这两种尺寸之间。但当堆大小发生变化时,年轻一代的大小不会发生相应的变化。

原始源

这里我指出了问题,以便在进一步之前可以注意到类似的事情,这导致了以下行为:

理想情况下,这应该是@Oleksandr:提到的行为

同时使用-XX:NewSize和-XX:MaxNewSize,年轻一代将介于这两种尺寸之间。但当堆大小发生变化时,年轻一代的大小不会发生相应的变化。

但因为我有<jdkarg value="-XX:MaxNewSize=5000"/>,意味着5000字节,这意味着它永远不会将Young Space增加到MaxNewSize,因为NewSize已经大于,所以设置其最大值的正确方法<jdkarg value="-XX:MaxNewSize=5000M"/>

当我做了这些更改,即添加了定义为MB的大小,然后它就按照预期给出了内存分布。

最新更新