Performance Tip: Don't use StringBuilder for compile time constants.
Overview
Using String + String notation is simpler than using a StringBuilder. It can be slower but for compiler time constants is faster to use.When using String + String is faster
One of the few optimisations the compiler will do is inline compile time constants.String + expressions which can be evaluated at compile time and don't need to be computed at runtime.
From ContextFinder.find()
final String jaxbContextFQCN = JAXBContext.class.getName(); final StringBuilder resource = new StringBuilder().append("META-INF/services/").append(jaxbContextFQCN);However, the compiler can compute the resource variable to a String literal at compile time improving performance.
final String jaxbContextFQCN = JAXBContext.class.getName(); // becomes a String literal. final StringBuilder resource = "META-INF/services/" + jaxbContextFQCN;Not only is this simpler, but also faster.
I didn't understand the compiler optimization you try to explain in the above post. In a sample when I try
ReplyDeleteString className = StringVsStringBuilderApp.class.getName();
String s = className + " Some Compile Time Constant";
I can still see the class file having the same two statements. So it looks like the string variable s is not evaluated by the compiler. Can you detail a bit on the optimization?