[Return to John Barton's Java Page]
Authors
John Whaley, MIT
John J. Barton, IBM T. J. Watson
Research Center
Abstract:
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.