Java Performance Tuning

Java(TM) - see bottom of page

|home |services |training |newsletter |tuning tips |tool reports |articles |resources |about us |site map |contact us |
Tools: | GC log analysers| Multi-tenancy tools| Books| SizeOf| Thread analysers| Heap dump analysers|

Our valued sponsors who help make this site possible
JProfiler: Get rid of your performance problems and memory leaks! 

Training online: Concurrency, Threading, GC, Advanced Java and more ... 

News December 2014

Get rid of your performance problems and memory leaks!

Modern Garbage Collection Tuning
Shows tuning flow chart for GC tuning

Java Performance Training Courses
COURSES AVAILABLE NOW. We can provide training courses to handle all your Java performance needs

Java Performance Tuning, 2nd ed
The classic and most comprehensive book on tuning Java

Java Performance Tuning Newsletter
Your source of Java performance news. Subscribe now!
Enter email:

Training online
Threading Essentials course

Get rid of your performance problems and memory leaks!

Back to newsletter 169 contents

I increasingly see the draconian statement that "The biggest bottleneck is always the one to fix". Any accompanying justification usually says that because systems are complex, fixing anything else is a probable waste of time because they might disappear whereas the biggest bottleneck will always be there.

A note from this newsletter's sponsor

New Relic - Try New Relic today and get your free Data Nerd shirt!
Free SaaS APM tool to monitor, troubleshoot, and tune apps
running on Websphere, Weblogic, Tomcat, Jetty, JBoss, Solr, Resin

I've always taken a more flexible approach, that your experience and knowledge of the application should inform you which bottleneck to target - for exactly the same reason, that since systems are complex, fixing an easier bottleneck might adjust the system so that the biggest bottleneck gets easier or goes away, and this way you get the biggest return for your time.

But is it possible for the biggest bottleneck to go away or reduce without directly targeting it? Actually it's easy to find scenarios where this happens. For example, take a JVM where operation X is the biggest bottleneck taking a very long time. Execution profiling shows some subroutines where X spends a lot of time. A simplistic view might make you target the algorithm X is following. Tuning fails; a more sophisticated or subsequent profiling including memory profiling shows X creates a lot of temporary objects and it's not the algorithm itself that's slow. You might then target reducing the number of objects that X uses. Again the tune fails, because in fact the heap has exceeded the available RAM on the box and is paging, the actual issue is that X cycles through enough new objects each time to cause a GC that requires paging, slowing everything down dramatically. The actual bottleneck for X being slow here is that the heap is sized too large. A holistic view of the system might have made you target the heap size first as it's the easiest to fix in any case, and you would have fixed X at the same time!

Of course proponents of the "fix the biggest bottleneck" will just say that was the biggest bottleneck. But that skirts the issue - you cannot possibly know what the biggest bottleneck is beforehand, you can only determine what it is using your various measuring tools, and these tools can mislead you. Easily mislead you. There are thousands of metrics, hundreds of things that commonly go wrong, dozens of ways to measure or profile a system at many different levels. My advice is don't blindly follow the "fix the biggest bottleneck" maxim, be aware your measuring tools may be telling you one bottleneck is the biggest but they can only tell you what they know about, not absolute reality. Use your knowledge and experience. I find that targeting easier bottlenecks to fix often gives you excellent insight into the system, and is rarely wasted.

Now on to all our usual sections: links to tools, articles, news, talks and as ever, all the extracted tips from all of this month's referenced articles.

A note from this newsletter's sponsor

Get total visibility in just 15 minutes with AppDynamics PRO,
A performance monitoring tool for Java/.NET apps.
It installs in minutes. Start your FREE TRIAL today.


Java performance tuning related news.


Java performance tuning related tools.

A note from this newsletter's sponsor : Deep dive Application Performance Monitoring
Fix performance issues with Java, .NET and Ruby platforms.
*** Monitor one app instance starting at $9 ***.


Jack Shirazi

Back to newsletter 169 contents

Last Updated: 2023-08-28
Copyright © 2000-2023 All Rights Reserved.
All trademarks and registered trademarks appearing on are the property of their respective owners.
Java is a trademark or registered trademark of Oracle Corporation in the United States and other countries. is not connected to Oracle Corporation and is not sponsored by Oracle Corporation.
RSS Feed:
Trouble with this page? Please contact us