求助>为什么设置了SurvivorRatio=8,但是实际Eden与Survivor不是8:1:1>
4回复
1月前

为什么设置了SurvivorRatio=8,但是实际Eden与Survivor不是8:1:1



JDK 环境

1.png

JVM 参数

$JAVA -Xms1G -Xmx1G -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./tmp -XX:SurvivorRatio=8 -XX:-UseGCOverheadLimit -Dlogback.loglevel=INFO -Djava.io.tmpdir=./tmp

但是出现的情况
当 -XX:SurvivorRatio=8 时,Eden 与 Survivor 的比例却不是 8:1:1

2.png

如上图:
新生代:341 MB;老年代:683 MB ;比例正常 1:2;
新生代内:
Eden: 293.5 MB;From:24MB;To:23.5MB:
比例不正常:Eden 区接近为 86%,而 Survivor 分别为 7%;
比例不是 Eden:From Survivor:To Survivor = 8:1:1

诡异的是:我将 -XX:SurvivorRatio=6 ,调整为 6 时,如下图:
3.png

新生代内:
Eden: 274MB;From:34 MB;To:33 MB:
比例为 Eden:From Survivor:To Survivor = 8:1:1

请问有大佬们经历过这种情况吗?
是有额外的东西影响到了这个参数吗?实在费解。

845 阅读
请先登录,再评论

回复列表

LeoUncle1月前

跟jdk版本有关?metaspace?

满满早1月前

JVM默认使用 AdaptiveSizePolicy 策略自动分配Eden和Survivor空间大小。所以下参数默认无效:-XX:SurvivorRatio=8使用以下参数,关闭AdaptiveSizePolicy,即可使Ratio生效:-XX:-UseAdaptiveSizePolicy

LeoUncle1月前
回复 满满早:

正解

回复
lvhaosir1月前
回复 满满早:

好的,谢谢大佬,我试试先。😁😁

回复