Reputation: 905
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?
Upvotes: 11
Views: 8664
Reputation: 65006
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
Upvotes: 6
Reputation: 9028
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
Upvotes: 6
Reputation: 533720
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}
Upvotes: 9
Reputation: 249
To check defaults use
java -XX:+PrintFlagsFinal
To find exactly what you want you can
java -XX:+PrintFlagsFinal | grep UseCompressedStrings
Upvotes: 16