What is current status of Oracle Java HotSpot VM performance options (+UseStringCache, +UseCompressedStrings, +OptimizeStringConcat)

StackOverflow https://stackoverflow.com/questions/19026112

Question

I was reading Java HotSpot VM Options. I've seen some interesting VM switches, mostly pertaining to Strings - which is of great value to me since my app is doing some heavy String manipulation. Those are:

  • -XX:+UseStringCache
  • -XX:+UseCompressedStrings
  • -XX:+OptimizeStringConcat

I was wondering - are these switches on by default? What is real world experience in using them? Do they make a difference?

Was it helpful?

Solution 3

Considering String performance, have a look at the -XX:+PrintStringTableStatistics and -XX:StringTableSize=. Java 7 comes with nice features that allow tuning of String cache when using the interned Strings. This way you can optimize the String cache size.

And, a related String Performance Q/A: Java GC tuning for strings

OTHER TIPS

To check defaults use

java -XX:+PrintFlagsFinal

To find exactly what you want you can

java -XX:+PrintFlagsFinal | grep UseCompressedStrings

I know that -XX:+UseCompressedStrings was dropped in Java 7 on the basis it was too hard to support.

For Java 7 update 40

$ java -XX:+PrintFlagsFinal 2>&1 | grep UseStringCache
     bool UseStringCache                            = false           {product}           
$ java -XX:+PrintFlagsFinal 2>&1 | grep OptimizeStringConcat
     bool OptimizeStringConcat                      = true            {C2 product}  

Based on my check of JDK6u21, JDK7u21 and JDK8u191 using PrintFlagsFinal, we have the following values:

                               JDK6u21       JDK7u21       JDK8u191

-XX:+UseStringCache              false         false   <unsupported>
-XX:+UseCompressedStrings        false  <unsupported>  <unsupported>
-XX:+OptimizeStringConcat        false          true           true
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top