Oracle Java HotSpot VM性能选项的当前状态是什么?(+UseStringCache,+UseCompressedStrings,+OptimizeStringConcat)

11
我正在阅读 Java HotSpot VM Options,其中有一些与字符串相关的选项很有意思,对我来说非常有价值,因为我的应用程序需要进行大量的字符串操作。这些选项包括:
  • -XX:+UseStringCache
  • -XX:+UseCompressedStrings
  • -XX:+OptimizeStringConcat
我想知道这些开关是否默认开启?在实际使用中有什么体验?它们是否会有所改善?
4个回答

16

要检查默认值,请使用

java -XX:+PrintFlagsFinal

为了精确地找到你想要的内容,你可以

java -XX:+PrintFlagsFinal | grep UseCompressedStrings

谢谢您的回复,但我正在寻找更完整的答案。 - Rade_303

9

我知道在Java 7中-XX:+UseCompressedStrings被放弃了,因为支持它太困难了。

对于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}  

1
我看到你发布了去年我提出的类似问题。那基本上涵盖了我需要知道的 :) - Rade_303

6

通过使用PrintFlagsFinal检查JDK6u21,JDK7u21和JDK8u191,我们得到以下值:

                               JDK6u21       JDK7u21       JDK8u191

-XX:+UseStringCache              false         false   <unsupported>
-XX:+UseCompressedStrings        false  <unsupported>  <unsupported>
-XX:+OptimizeStringConcat        false          true           true

6
考虑到字符串性能,可以关注 -XX:+PrintStringTableStatistics-XX:StringTableSize=。Java 7提供了良好的功能,允许调整使用内部化字符串时的字符串缓存。这样,您可以优化字符串缓存大小。
另外,有一个相关的字符串性能问答:Java GC tuning for strings

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接