为什么MaxNewSize大于JVM中的MaxHeapSize?

时间:2014-06-27 03:19:57

标签: jvm

enter image description here

我只在启动时设置了一些JVM配置:-Xmx1024m -Xms1024m -XX:MaxPermSize=128m -XX:PermSize=128m

2 个答案:

答案 0 :(得分:0)

年轻一代对老一代的规模由NewRatio控制。所以,即使MaxNewSize> MaxHeapSize,NewRatio = 2,新空间的有效最大大小为1:2。老一代占据堆的2/3,而新一代占据1/3。

在您的情况下,旧空间为2/3 * 1024 = 682.6M,新空间为1/3 * 1024 = 341M。

MaxNewSize的阈值只有在低于NewRatio提供的阈值时才会启动。可以将它们视为用于配置内存的多个独立旋钮。 JVM将选择符合所有设置的设置。

答案 1 :(得分:0)

来自HotSpot sources

product(uintx, MaxNewSize, max_uintx,                                     \
        "Maximum new generation size (in bytes), max_uintx means set "    \
        "ergonomically")                                                  \

由于您未明确设置MaxNewSize,因此会采用特殊处理的默认值。
无论如何,MaxNewSize值只是一个提示,而NewSize保持年轻一代的实际大小。