如果您查看文档(例如http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html),则会发现XX:SurvivorRatio的默认值为8。

如果您在未显式设置SurvivorRation的情况下检查了已启动的正在运行的jvm,则可以看到以下默认值:

jmap -heap <pid>


将输出

...
SurvivorRatio    = 8
...


但是,如果使用VisualGC检查S1 S0的最大大小,则会看到使用了SurvivorRatio = 1。

如果显式启动java程序,且-XX:SurvivorRatio = 8,则图片会发生变化

那么为什么要默认。未使用的默认值很烦人。

最佳答案

关于Java性能调整的the BOOK

-XX:SurvivorRatio=<n> should be used when you want to explicitly size survivor
spaces to manipulate object aging with the concurrent garbage collector, or to
manipulate object aging with the throughput garbage collector when adaptive sizing
is disabled using the command line option -XX:-UseAdaptiveSizePolicy.


因此,除非使用-XX:SurvivorRatio,否则将忽略-XX:-UseAdaptiveSizePolicy

10-08 09:35