[Return to John Barton's Java Page]
John Whaley, MIT
John J. Barton, IBM T. J. Watson Research Center
Throughout the computer industry it seems as if everyone is talking about Java. And everyone who uses Java, from web surfers to virtual machine writers, focuses about Java performance. Java programs running on Sun's original interpreter-driven Java Virtual Machine (JVM) were several orders of magnitude slower than comparable programs written in C. Just-In-Time compilers (JITs) on more advanced JVMs have begun to close the gap, but major performance gains still seem possible.
Obviously we'd like to see Java performance comparable with C++ code. Possible bottlenecks include synchronization, null reference and array bounds checking, or Java's exception handling. To investigate the issues surrounding JVM performance, Derek Lieber in our group here at T. J. Watson wrote an experimental JVM [Derek Lieber, unpublished]. To improve its run-time performance, he needed a way to discover its performance bottlenecks. A traditional profiler would be of limited use here, because it would be simply profiling the VM without regard to the Java program which was running on it. Also traditional profilers cannot make sense of JIT-compiled code, or make a clear distinction between the time spent executing Java code and the time spent in the VM. Therefore, we set out to write a performance visualizer for our JVM; the technique is general enough to
apply to other virtual machines. This article describes that visualizer.
This article appear in Dr. Dobb's Journal, March 1998. The article can be ordered online.