What's new in JProfiler 5.2

Change release:

Please see the change log for a detailed list of changes.

JProfiler 5.2 introduces the following notable new features:

Significant reduction in memory overhead. We have rewritten the back-end for the heap walker with the following visible benefits:
  • When taking a heap snapshot, the overhead on the profiled JVM is now as small as possible. The remaining memory overhead is mainly due to the profiling interface of the JVM. This allows you to take heap snapshots for very large heaps.
  • It is now possible to open large snapshots regardless of the amount of physical memory that you have on the machine where the JProfiler GUI is running. If not enough memory is available to keep object indexes in memory, a disk-based fallback will be used.
  • We can now implement features in the heap walker that require a more advanced analysis of the heap. The biggest objects view below is the first such result.

CPU data is now stored and loaded in a more memory-efficient way. The notable improvements are:

  • When profiling, CPU data of dead threads are periodically saved to disk in order to minimize the memory overhead on the profiled JVM. For long-running applications that constantly create new threads this makes a big difference.
  • When loading snapshots, not all CPU data is loaded into memory, but only the parts that are required for displaying data are selectively loaded from the snapshot. This applies to snapshots that have been saved with JProfiler 5.2+.

The biggest objects view shows the objects that retain most memory. This is useful for analyzing excessive memory consumption as well as for finding memory leaks. You can open each biggest object to show the tree of retained objects. This tree is a so-called "dominator-tree", where each object node contains the objects that are directly retained by it. In many cases, these are direct outgoing references. All objects that retain more than 0.5% of the retained size of the parent object are displayed in the tree.

Screenshot

Triggers were enhanced in several areas. The visual changes include:

JVM startup and JVM exit triggers were added. With those new event types you can execute actions when the JVM is started and when it is shut down:
Screenshot
Triggers can now be enabled and disabled from the JProfiler GUI and the controller API:
Screenshot
Triggers can now be organized into groups by assigning them a group ID in the trigger wizard:
Screenshot
Triggers in trigger groups can be enabled or disabled together:
Screenshot
The call tracer can now be controlled with a trigger action and from the API:
Screenshot

Bookmarks received the following new features:

You can now inspect all bookmarks in the current session in a separate dialog (Profiling->Edit Bookmarks). Bookmarks can also be exported to HTML or CSV from this dialog:
Screenshot
Bookmark properties can be edited, including the color and the line style of a bookmark:
Screenshot
The "Add a bookmark" trigger action can now set the color and the line style of the bookmark:
Screenshot
In the "Time" view of the heap walker you can now precisely select all objects allocated between two bookmarks:
Screenshot
The new console integration wizard allows you to use all integration wizards in JProfiler even if no GUI is available, for example, on a remote machine. In addition, the console integration wizard exports a session config file that can be imported in a JProfiler GUI installation to connect to the profiled JVM without any further configuration.
Screenshot
Export and import of session settings. In this way, you can easily move sessions and their profiling settings to different JProfiler installations or share them with your colleagues.
Screenshot
View filters for snapshot comparisons with tabular or tree data have been added. Just like with the view filters for the dynamic views, you can now focus on specific packages, rather than having to look at all classes in the JVM.
Screenshot
Objects in heap snapshots and HPROF snapshots can now be compared. Previously the memory comparisons only offered to compare "All objects" or "Recorded objects". Comparing objects from the heap walker is useful if you want to make sure that you only compare strongly referenced objects.
Screenshot
Nodes can be hidden in call tree and hot spot views. In call trees, all nodes of the same name will be hidden. Times and percentages will be adjusted as if the hidden nodes did not exist at all. Hiding nodes on one view does not influence other views.
Screenshot
You can show hidden nodes again with the "Show hidden" tool bar button that appears after you hide a node.
Screenshot
Views with live differencing now show differences also as percentages. In the view settings you can choose whether the numerical difference or the percentage should be used for sorting the difference column.
Screenshot
All integration wizards now support offline profiling. Offline profiling means profiling without the JProfiler GUI, data is recorded and saved with the help of triggers or the profiling API.
Screenshot
The dynamic allocation views can now be auto-updated periodically. Previously, you had to click the "Calculate" button to refresh the allocation data.
Screenshot
HP-UX on Itanium is now supported for profiling. This complements the existing support for HP-UX on PA-RISC. Both 32-bit as well as 64-bit JVM are supported.
Support for the latest IDEs and application servers. JProfiler now has plugins for IDEA 8.x, Netbeans 6.5, and JDeveloper 11g. Application server integration wizards have been added for Websphere 7, Glassfish v3, Coldfusion 8, Jetty 6.