今天,我在调整Java堆大小时注意到了一个奇怪的行为。作为确定年轻一代人数的参数,我选择:
-XX:NewSize=2100M
-XX:MaxNewSize=2100M
另外,我使用以下命令关闭了AdaptiveSizePolicy:
-XX:-UseAdaptiveSizePolicy
根据这三个参数,我的年轻代始终应该是2100M。但是当我查看我的gc日志时,大小仅为1900 MB(〜89%)。当尝试不同的大小时,日志中的年轻一代大约占相同百分比(〜89%)。
整个堆为5 GB。在日志文件中,整个堆的大小不错(〜4,97 GB)。我使用的收集器是用于年轻一代的PSYoungGen和用于旧一代的ParallelOldGC。
有人可以简要解释一下为什么年轻的一代比原来的要小吗?
最佳答案
您是否可能只看伊甸园而不是整个年轻一代?
-XX:NewSize控件'Maximum size of new generation (in bytes)'这不仅是'Eden空间',它还用于管理两个'Survivor空间'。可以使用-XX:SurvivorRatio来控制它们之间的比率
请参见this link。
例如,我使用安装了visualGC插件的visualVM来检查以以下VM参数-XX:NewSize = 256M和-XX:SurvivorRatio = 4运行的Java进程。
我的伊甸园空间是170.750M
我的幸存者0是42.625M
我的幸存者1是42.625M
170.750 + 42.625 + 42.625 = 256M
关于java - Java堆大小-没有AdaptiveSizePolicy的年轻代大小,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24019290/