Java:为什么不使用 XX:SurvivorRatio 的默认值?

标签 java garbage-collection jvm

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

如果你检查一个正在运行的 jvm,它已经启动但没有明确设置 SurvivorRation,你可以看到这个默认值:

jmap -heap <pid>

会输出

...
SurvivorRatio    = 8
...

但是如果您使用 VisualGC 检查 S1 S0 的最大大小,您会发现使用的是 SurvivorRatio = 1。

如果你显式地使用 -XX:SurvivorRatio=8 启动 java 程序,情况就会改变

那么为什么默认。未使用的默认值非常烦人。

最佳答案

the BOOK关于java性能调优:

-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:-UseAdaptiveSizePolicy,否则 -XX:SurvivorRatio 将被忽略。

关于Java:为什么不使用 XX:SurvivorRatio 的默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27293826/

相关文章:

java - Vigenere 密码输出

java - 单线程应用程序的 GC 设置

java - Java 垃圾回收是否安全地清除了垃圾数据?

跨不同 JVM 的 Java 关闭 Hook

ssl - Gradle 对存储库使用证书身份验证

java - 如何使用带 `java`的with `kotlin-compiler.jar`命令编译Kotlin源代码?

java - java UnsatisfiedLinkError 上的 libpd

java - 在java中将RGB图像转换为灰度HSV

java - 如何在Java中建立链表?

java - 垃圾收集器在没有用户代码运行的情况下在 Tomcat Web 应用程序中频繁运行