Java堆大小-不带AdaptiveSizePolicy的年轻代大小
今天,我在调整java堆大小时注意到一个奇怪的行为。作为衡量年轻一代的参数,我选择:Java堆大小-不带AdaptiveSizePolicy的年轻代大小,java,garbage-collection,heap-memory,Java,Garbage Collection,Heap Memory,今天,我在调整java堆大小时注意到一个奇怪的行为。作为衡量年轻一代的参数,我选择: -XX:NewSize=2100M -XX:MaxNewSize=2100M 此外,我还通过以下方式关闭了AdaptiveSizePolicy: -XX:-UseAdaptiveSizePolicy 根据这三个参数,我的年轻一代应该是2100米。但是当我查看gc日志时,它的大小只有1900 MB(约89%)。当尝试不同的尺寸时,日志中的年轻一代大约占相同的百分比(~89%) 整个堆是5GB。在日志文件中,整
-XX:NewSize=2100M
-XX:MaxNewSize=2100M
此外,我还通过以下方式关闭了AdaptiveSizePolicy:
-XX:-UseAdaptiveSizePolicy
根据这三个参数,我的年轻一代应该是2100米。但是当我查看gc日志时,它的大小只有1900 MB(约89%)。当尝试不同的尺寸时,日志中的年轻一代大约占相同的百分比(~89%)
整个堆是5GB。在日志文件中,整个堆的大小很好(~4,97 GB)。我使用的收集器是年轻一代的PSYoungGen和老一代的ParallelOldGC
有人能简单地解释一下为什么年轻一代的规模比它应该的要小吗?有没有可能你只关注伊甸园空间而不是整个年轻一代 -XX:NewSize控件“”这不仅仅是“伊甸园空间”,它还用于管理两个“幸存者空间”。它们之间的比率可以使用-XX:SurvivorRatio来控制 看 例如,我在安装了visualGC插件的情况下使用visualVM来检查一个java进程,该进程使用以下VM参数运行-XX:NewSize=256M和-XX:survivoratio=4 我的伊甸园空间是170.750米 我的幸存者0是42.625米 我的幸存者1是42.625米
170.750+42.625+42.625=256M你能发布gc日志吗?谢谢你的回答。也许你是对的,听起来合乎逻辑。但是当我有一个类似“39.910:[GC 39.910:[ParNew:261760K->0K(261952K),0.2314667秒]262017K->26386K(1048384K),0.2318679秒]”的日志文件行时,我认为括号中的“261952K”是整个年轻一代的大小(伊甸园+2个幸存者空间)。在我的日志文件中,该值与配置的值不同,例如,我配置了-XX:NewSize=2500M,日志文件显示我的年轻一代为2225M(~89%)