我有一个过程,我在旧的gen空间消耗很少的内存。由于这个原因,很多内存都被浪费了。我尝试使用NewRatio参数来调整旧的gen空间,但是我无法将其降低到1以下。即使将其设置为1,旧的gen区域仍有很多空间根本没用。
有没有什么方法/配置可以减少旧发电机空间的大小而不减小年轻发电机的尺寸?
谢谢, Nitin Goswami
答案 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大小保持在最大堆大小的四分之一到三分之一。老一代必须比新一代更大。