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 February 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 159 contents

This month I've got a little puzzle for you. How can you get a null pointer exception from the following piece of code?

	//map is an instance of HashMap
	x = map.get("hello");
To be clear, "map" is not null, it is an instance of the standard HashMap class from the JDK, the get() method and all the other HashMap methods are the normal ones you have in the JDK, and there has been no bytecode injection. Oh, and the process is not out of memory, hasn't been out of memory, and the HashMap instance has not been used in more than one thread.

Maybe you've figured it out already? If not, here's a hint (before I tell how you just below), it's related to a performance anti-pattern. If you like puzzles, figure it out before reading on ...

A note from this newsletter's sponsor

ManageEngine's Site24x7 : Deep dive Application Performance Monitoring
Fix performance issues with Java, .NET and Ruby platforms.
*** Monitor one app instance at $9 per year***

This NPE was an actual problem a colleague encountered. He was unable to debug the configuration that caused it, so he only had the stack trace and the code. Many hours of code path analysis left him with the finding that a HashMap.get() was throwing an NPE, and the HashMap instance was definitely not null, just as the code fragment above shows. I'm sure you've figured it out yourself now, but if not, let me reveal one more hint - the signature of "x" matters.

Got it? Here's enough code to recreate the bug yourself

	int x;
	HashMap<String,Integer> map = new HashMap<String,Integer>();
	x = map.get("hello");

The auto-unboxing of the non-existent value was, of course, the issue. I know autoboxing was introduced to make coding easier, but it's a definite performance anti-pattern and can lead to annoying bugs like this which are non-intuitive. Personally, I always try to remove autoboxing by making any such calls explicit, so that although the code is a little uglier, it's also clearer what's happening.

Now on to yet more links to Java performance tools, news, articles and, as ever, all the extracted tips from all of this month's referenced articles.

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


Java performance tuning related news.


Java performance tuning related tools.

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.


Jack Shirazi

Back to newsletter 159 contents

Last Updated: 2022-06-29
Copyright © 2000-2022 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