我在读Java HotSpot VM Options。我见过一些有趣的虚拟机交换机,主要与字符串有关 - 这对我来说很有价值,因为我的应用程序正在做一些繁重的字符串操作。那些是:
-XX:+UseStringCache
-XX:+UseCompressedStrings
-XX:+OptimizeStringConcat
我在想 - 这些开关默认是开启的吗?使用它们的真实体验是什么?他们有所作为吗?
考虑到字符串性能,请查看-XX:+PrintStringTableStatistics
和-XX:StringTableSize=
。 Java 7具有很好的功能,允许在使用实习字符串时调整String缓存。这样,您可以优化String缓存大小。
并且,相关的字符串性能Q / A:Java GC tuning for strings
要检查默认值,请使用
java -XX:+PrintFlagsFinal
要准确找到你想要的东西
java -XX:+PrintFlagsFinal | grep UseCompressedStrings
我知道-XX:+UseCompressedStrings
在Java 7中被删除,因为它太难以支持。
对于Java 7更新40
$ java -XX:+PrintFlagsFinal 2>&1 | grep UseStringCache
bool UseStringCache = false {product}
$ java -XX:+PrintFlagsFinal 2>&1 | grep OptimizeStringConcat
bool OptimizeStringConcat = true {C2 product}
根据我使用PrintFlagsFinal检查JDK6u21和JDK7u21,我们有以下值:
JDK6u21 JDK7u21 JDK8u191
-XX:+UseStringCache false false <unsupported>
-XX:+UseCompressedStrings false <unsupported> <unsupported>
-XX:+OptimizeStringConcat false true true