我试图了解用于定义 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 分配年轻代大小。
所以我在这里有一些问题:
我尝试了很多谷歌搜索,但没有找到任何结论。 任何有助于理解这些arg的帮助将不胜感激。
更新
我得到的输出并不像预期的那样:
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,年轻空间为2500 MB,这是我的初始值。
答案 0 :(得分:1)
如果与当我们定义-XX:NewSize和-XX:NewRatio然后初始年轻 生成大小将使用-XX:NewSize定义,是否正确?
NewRatio
和NewSize
一起使用,则会忽略 MaxNewSize
当堆大小增加到它的MAX(在这种情况下为20000M)时会发生什么情况, 然后它如何定义最大年轻代大小,它将使用-MaxNewSize 或-XX:NewRatio或者它们都不会被使用,因为我有-XX:NewSize?
当使用NewSize
和MaxNewSize
时,年轻一代将介于这两种尺寸之间。但是当堆大小改变时,年轻代的大小不会相应改变。
答案 1 :(得分:1)
在这里,我指出了问题,以便在进一步之前可以注意到类似的事情,这导致了这种行为:
理想情况下,这应该是@Oleksandr提到的行为:
使用-XX:NewSize和-XX:MaxNewSize,年轻的gen将介于这两种尺寸之间。但是当堆大小改变时,年轻的基因大小不会相应地改变。
但是因为我有<jdkarg value="-XX:MaxNewSize=5000"/>
意味着5000字节意味着它永远不会将Young Space增加到MaxNewSize,因为NewSize已经大了,正确的方法设置它的最大值 <jdkarg value="-XX:MaxNewSize=5000M"/>
。
当我进行此更改,即将已定义的大小添加为MB时,它会按预期提供内存分发。