OptimizeIt vs. JProbe

Intuitive Systems' OptimizeIt (http://www.intuisys.com) and Sitraka Software's JProbe (http://www.sitraka.com) are tools designed to aid Java developers in producing more efficient software. In each case, we reviewed the Windows version of the software, though Solaris and Linux versions are available.

Each product contains memory and CPU profilers. Sitraka offers several versions of its JProbe product with different mixes of tools. We reviewed the JProbe ServerSide Suite, which has thread debugging and code coverage analysis tools in addition to the profilers. It was a fast, easy process to set up a project to work with a target program using each product. There were a few things to fill out in a dialog box and then we were off.

The differences between the products began to show up with CPU profiling. OptimizeIt shows the performance data in the form of a method call tree, with each node displaying the percentage of time used by that node and its children from the time the CPU profiling was turned on. There are also icons on the nodes to indicate if the method used time directly. Finding the bottleneck methods is a simple matter of drilling down through the tree.

JProbe displays CPU profiling data in several forms. There is a graphical method call tree that can be conveniently zoomed and panned to visually zero-in on hot spots that are highlighted by color intensity. This gives a bird's-eye view of the entire data set, allowing something more like random access to sections of the tree, thus speeding the process of drilling down to the critical code. The color coding can be set to highlight many different performance measures, giving a variety of perspectives on the data.

The simple method call tree presentation in OptimizeIt is useful to developers with little or no learning curve. JProbe's varied presentation will take longer to learn, but should allow an experienced user to zero-in faster on problem code.

Heap profiling provides an accounting of the Java programs use of memory. OptimizeIt shows all of the classes used by the program and the number of instances of each. From this display, a user can look at what methods allocated the various instances, what objects have references to a given instance, and what objects the instance itself references. The reference graphs are useful for finding objects that cannot be garbage collected because there are unused references to them. OptimizeIt also offers an overall view of the heap, allowing a user to drill down into the object reference hierarchy from top-level references (for example, from a Thread).

JProbe's view of the heap data also starts with a list of class instances. Much the same details can be examined as in OptimizeIt, but again, the multiplicity of views of that data makes JProbe harder to learn. As with CPU profiling, JProbe has a color-coded graphical view of the heap that can make it faster for an experienced user to find the key heap data. The reference graph presents a huge amount of data in a very compact and easy-to-navigate form. It makes excellent use of tooltips and dynamic highlighting to display details without cluttering the already complex graph.

JProbe also has a feature called the Garbage Monitor, which makes it easy to identify methods that produce many objects that are garbage collected. That is important information for diagnosing performance problems caused by excessive temporary object creation. OptimizeIt can provide the same information, but somewhat indirectly and therefore less conveniently.

JProbe Coverage is a tool for determining which parts of your code have been exercised in testing. Using it is a simple matter of running the target program inside the tool, taking a coverage snapshot, then examining the data in the snapshot. It was easy to drill down into the coverage data to see the percentage of code covered in packages, classes, or methods. It can generate several useful reports in text or HTML format.

JProbe Threadalyzer monitors the operation of your Java program, producing a list of actual or potential thread problems. It can identify deadlocks, race conditions, or threads that have been inactive for some user-definable period of time.

OptimizeIt should appeal to Java developers who want to get started quickly with little learning curve. JProbe will be attractive to those who like to fine-tune their tools, and look at their profiling data in many different ways. It also comes in different configurations for a more complete tool set.