Java堆调优中NewRatio的最小值

时间:2017-10-16 09:09:32

标签: java performance heap heap-memory

我有一个过程,我在旧的gen空间消耗很少的内存。由于这个原因,很多内存都被浪费了。我尝试使用NewRatio参数来调整旧的gen空间,但是我无法将其降低到1以下。即使将其设置为1,旧的gen区域仍有很多空间根本没用。

有没有什么方法/配置可以减少旧发电机空间的大小而不减小年轻发电机的尺寸?

谢谢, Nitin Goswami

1 个答案:

答案 0 :(得分:-1)

您可以使用以下JVM参数控制堆大小:

-Xmsvalue

-Xmxvalue

-XX:MinHeapFreeRatio =最小

-XX:MaxHeapFreeRatio =最大

-XX:NewRatio =比

-XX:新尺寸=尺寸

-XX:MaxNewSize =大小

-XX:+ AggressiveHeap

-Xms和-Xmx参数分别定义最小和最大堆大小。由于GC在代数填满时发生,因此吞吐量与可用内存量成反比。默认情况下,JVM会在每个GC上增大或缩小堆,以尝试将可用空间的比例保持在特定范围内每个集合的活动对象。该范围通过参数-XX:MinHeapFreeRatio = minimum和-XX:MaxHeapFreeRatio = maximum设置为百分比;和总大小由-Xms和-Xmx限制。

为固定堆大小设置-Xms和-Xmx的值彼此相等。当堆增长或收缩时,JVM必须重新计算旧的和新的生成大小以维护预定义的NewRatio。

NewSize和MaxNewSize参数控制新一代的最小和最大尺寸。通过将这些参数设置为相等来调节新一代的大小。年轻一代越大,次要收藏就越少。相对于老一代的年轻一代的规模由NewRatio控制。例如,设置-XX:NewRatio = 3意味着老一代和年轻一代之间的比例是1:3,伊甸园和幸存者空间的总和将是堆的四分之一。

默认情况下,使用Java HotSpot Server JVM调用Application Server。服务器JVM的默认NewRatio为2:旧一代占据堆的2/3,而新一代占用1/3。较大的新一代可以容纳更多的短期对象,减少了对慢速主要集合的需求。老一代仍然足够大,可以容纳许多长寿命的物体。

调整Java堆的大小:

确定您可以为JVM承担的内存总量。因此,请根据年轻一代规模绘制您自己的绩效指标,以找到最佳设置。

为年轻一代提供充足的记忆。默认值是根据NewRatio和-Xmx设置计算的。

较大的伊甸园或年轻一代的空间增加了完整的GC之间的间距。但年轻的太空收藏可能需要相应更长的时间。通常,将eden大小保持在最大堆大小的四分之一到三分之一。老一代必须比新一代更大。