If I want to become a performance consultant for Java applications and systems, what are the main skills I need?
Do you agree on the importance of these? What else would you add?
UPDATED from answers:
Additional Skills:
Mindset (offered by several answers, although I didn't ask for it):
I think the most important skill is an analytical mind able to follow the evidence and not the "gut feel" and really break down and measure the issues.
After that, it would take some creative ways to understand measuring. When someone hires a performance consultant they are often stuck, which most likely means they have real users doing real things, which means Java won't be the only thing in the stack (as you noted databases, but there may be JavaScript and networking issues and who knows what else as well).
In addition to all of that, in terms of the laundry list, the big thing missing is garbage collection. Understanding how that works and how to tweak that is critical. Many cases will involve problems with stop-the-world garbage collection just stopping an important process for too long.
You really need to have an extensive toolkit of potential solutions, as each client will need different things. Some will need an object pool for their immutable objects, some will need to introduce immutable objects to reduce synchronization, some will need to introduce mutable objects to prevent excessive object creation, etc.. Performance is really a case-by-case thing, and you need to have a range of experience and knowledge to pull from to help with each case.
I think that depending upon the particular client and problem at hand, you'll need to have excellent skills in algorithmic analysis and optimization. Is your problem at the math-algorithmic level, or is it at the Java-algorithmic level?
You'll also need to be very familiar with the implementations of JVM you'll be working with. Knowing the language and API isn't good enough: you'll have to know in intimate detail which language constructs to use in certain situations, and this can vary depending upon the specific JVM you are using. A profiler won't always reveal JVM-specific performance issues. As others have noted, the same JVM can behave differently on disparate harware.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With