今天我在调整java堆的大小时发现了一个奇怪的行为。作为调整我年轻一代的参数我选择:
-XX:NewSize=2100M
-XX:MaxNewSize=2100M
此外,我使用以下命令关闭了AdaptiveSizePolicy:
-XX:-UseAdaptiveSizePolicy
根据这3个参数,我的年轻一代应该是2100M。但是当我查看我的gc-log时,大小只有大约1900 MB(~89%)。当尝试不同的大小时,日志中的年轻一代大约相同的百分比(~89%)。
整个堆是5 GB。在日志文件中,整个堆的大小很好(~4,97 GB)。我使用的收藏家是年轻一代的PSYoungGen和老一代的ParallelOldGC。
有人可以简单地解释为什么年轻人的体型小于应该的年龄吗?
答案 0 :(得分:0)
您是否有可能只关注伊甸园空间而不是整个年轻一代?
-XX:NewSize控件'Maximum size of new generation (in bytes)'这不仅仅是'Eden空间',它也用于管理两个'幸存者空间'。它们之间的比例可以使用-XX:SurvivorRatio
来控制请参阅this link。
例如,我使用安装了visualGC插件的visualVM来检查使用以下VM参数运行的java进程-XX:NewSize = 256M和-XX:SurvivorRatio = 4.
我的伊甸园空间是170.750M 我的幸存者0是42.625M 我的幸存者1是42.625M
170.750 + 42.625 + 42.625 = 256M