The YourKit Java profiler project refreshed its latest 6.0 beta, with the final release slated for early December. YourKit 6.0 provides efficient monitoring of production applications, and the latest release reduced memory and CPU consumption of the profiler by a further 20%. YourKit provides both commercial and free licenses.
The YourKit Java profiler is an offshoot of the IntelliJ IDEA project, and was initially designed to meet the challenges of developing a stable Java application on the scale of that IDE. The project later evolved into a general-purpose Java and .NET profiler. Its namesake company offers dual licensing, and makes free licenses available to open-source projects.
A unique aspect of YourKit is that it allows the efficient profiling of a running, production application. This is accomplished with a dynamic runtime library that YourKit lets developers distribute along with their applications. The library collects application profiling data in a minimally invasive manner, and records them for post-mortem analysis.
YourKit released the latest beta of its upcoming 6.0 version. The most significant changes in the latest release aim to make collecting performance data more efficient. One new feature is adaptive recording of object memory allocation:
Object allocations can be recorded either for each created object (as before; slower) or adaptively, skipping allocation events for some percent of objects in order to keep moderate overhead.
Adaptive recording is especially useful [for] profiling excessive [object] allocation. It allows finding [object] allocation hot spots with the same efficiency as if all object allocations were recorded, whereas profiling overhead is dramatically smaller.
Corresponding changes are made in the Control panel, IDE plugin user interfaces, agent command line options and in the profiler API.
In addition, creating memory snapshots of an application is now about 20% faster, and the loaded snapshots consume less memory, according to the project documentation. Since the 6.0 beta works with JDK 6, it also supports Mustang's ability to help profile the exact length of arrays, something that was not possible prior to JDK 6.
Another benefit of Mustang support is that native methods are now available for profiling via the Java VM Profiling Interface.
What profiling tools do you prefer in your projects?