My co-worker and I were debugging a bug in my codebase, which implements Axis1, the other day. We ended up finding an issue with a static implementation of Vector in org.apache.axis.utils.XMLUtils.
It was a humbling experience for me as we delved deep into Java heap dumps. I got a lesson on reflection, thread local variables, and what static variables truly mean to garbage collection. It must have been an inspiring experience for him because a few days later he wrote an excellent article on his blog giving an overview of common memory leaks in Java. It's a good read for any new Java programmer and a good refresher for experts.