Category Archives: debugging

How to Count Java Objects in Memory

There are all these wonderful tools for profiling Java programs. JVisualVM, JProfiler, Mission Control and the Flight recorder, jhat, just to name a few. Yet every once in a while, you can’t use any of them, for one reason or another. Where do we go from here?

How come there’s no profiler?

The situation is not quite as exotic as you may think. When I was asked recently to write programs in the middleware layer, the lack of tools was the one of the reasons why I denied. More precisely, I was asked to write Java programs running in the webMethods ESB. In theory, that’s a great idea, but the lack of tools makes programming a pain. No debugger. No profiler.

In theory, you can debug such a program using remote debugging, but that requires many preconditions to be fulfilled. The administrator has to start the program with additional parameters, and they have to open the ports in the firewall. Sometimes that’s possible in the development and test stages, but usually it’s completely out of question in the production stage.

However, being a consultant, sometimes I’m asked to help our customer nonetheless. Continue reading

How to Eliminate Those Annoying Tomcat Deployment Waits

Java developers must be patient. To an incredible extend.

Mind you, back in the mid-90s IBM invented Hot Code Replacement to distract from how slow their WebSphere Application Server was at the time. It took several minutes to start the application server and to deploy an application. This resulted in very slow turn-around cycles. In other words: developers spent a lot of time with waiting.

Luckily IBM implemented Hot Code Replacement in their JDK 1.3 virtual machine (IBM J9 VM), eliminating the nasty waits almost completely. It was an awesome experience at the time. When Hot Code Replacement later was introduced to SUN’s JDK 1.4.1, we were very quick to adopt it.

And today?

By default, both Eclipse and Tomcat are configured such that every change of the source code results in reloading the context, which is just another word for restarting the application. Depending on the application, this is just a matter of seconds. It also may take a few minutes if you’re working on a bigger application. In most cases your application state is lost. You have to sign on again and to dig all the way through the seven pages of the wizard you’re working on. Did I mention the error you’re hunting occurs in wizard’s last step?

The good news is it hasn’t be to be this way. Read on to learn how to get rid of the redeployments.
Continue reading

Renaming Threads

JEE servers tend to create quite a few threads. Sometimes you are looking for a very slow algorithm, maybe even an infinite loop. You don’t know where to find it beforehand, so chances are you didn’t set a breakpoint. At other times the situation is even worse: the infinite loop occurred in a production environment, and you are sent a trace dump. Wouldn’t it be nice to know which thread had been working on the infinite loop?

Continue reading

Where Am I?

A particularly nice feature of the Java language is Introspection. Chances are you are familiar with reflection, being the most popular API that allows a program to analyze itself. But Java doesn’t stop there. This article shows you how easy it is to find out where you are – or rather, where your JVM’s program counter points to.
Continue reading