Collectives™ on Stack Overflow
Find centralized, trusted content and collaborate around the technologies you use most.
Learn more about Collectives
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
Learn more about Teams
Ask 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?
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}
–
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
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
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.