Changes in version 7.0 from 6.0:
Memory profiling
-
New feature: automatic memory inspections.
With the help of inspections you can easily find the causes and possible solutions of usual memory-related problems. Read more...
-
New feature: object generations.
The generations distribute objects by time of their creation, and are thus very helpful in finding memory leaks and performing other analysis of how heap content evolves over time. Read more...
-
New feature: values of primitive types (such as 'int' or 'double') are shown. Read more...
- Option to capture HPROF format snapshots from within the profiler UI (requires that the profiled application runs on Sun Java 6+)
- New feature: ability to compare snapshots from different runs
- New feature: filter in object explorer allows to select by object class name or by java.lang.String value
- New feature: view "Memory | Dead objects" shows objects that are not accessible from GC roots but still present in snapshot (i.e. not collected yet). The view can be used to analyze excessive garbage allocation, especially if the snapshot doesn't contain recorded object allocation information.
- For HPROF snapshots, object index (e.g. in Ctrl+Q) is exactly the same object address as the one written to the HPROF snapshot. This allows cross referencing with tools such as jhat.
- Improved reliability when capturing memory snapshots of huge heaps of 32-bit Java 5 and newer, reducing the peak memory usage for temporary data structures
- UI: in slave views, merged paths are shown instead of single paths if selection represents more than one object
- Performance improvement: memory snapshots are captured much faster on Java 5 and newer
- Performance improvement: memory snapshots of own format are loaded faster (by factor of 2 or even more, depending on snapshot) thanks to the snapshot format improvements. The snapshots also take less disk space.
- Performance improvement: loading of memory snapshots takes less memory
- Performance improvement: "Class list" view is opened much faster
- Performance improvement: "Class tree" speedup (in some cases, up to 30%)
CPU profiling
- New feature: "live" call tree view
- New feature: CPU snapshot comparison. Open snapshots to compare and use "File | Compare Snapshot with...".
- J2EE view: invocation counts in backtraces are shown for sampling snapshots as well
- J2EE view: average time column added
- Thread CPU times are available on Linux and Mac OS X; this dramatically improves the quality of profiling results gathered on these platforms
- J2EE view: dramatic speed up
- J2EE profiling: option to ignore prepareStatement()/prepareCall() invocations in J2EE results
- J2EE profiling: SQL view: added "Stored procedures" group
Telemetry
- New feature: monitor profiling. See corresponding new tab in telemetry. Results can be grouped by waiting thread, by blocker thread and by monitor class name. Percents in the tree are shown using the duration of monitor profiling (i.e. time passed since last start or clear) as 100%. This allows to estimate the average percentage of time when thread waits/is blocked.
- Telemetry: in the "Memory profiling" tab, new live view showing current object counts and sizes by class (requires Java 5 or newer). Results can be filtered by class name pattern.
- Telemetry: thread stack traces and deadlock detection is available profiling with Java 1.3 and 1.4 as well
- GC telemetry: shows garbage collector names
- Telemetry: in "Threads and Deadlocks" new option "Show thread name and status only"
- Telemetry: Linux: CPU usage telemetry is available on older kernels as well
- Telemetry UI reworked
Target platforms and VMs support
- Windows Vista supported
- IBM Java 5 SR5 supported
- Mac OS X 10.5 "Leopard" supported (tested with developer preview)
- Mac OS X: profiling with Java 6 (developer preview 1) is now supported
- CPU sampling is now available for IBM Java too
- JRockit 5 R27.2 and R27.3 supported
IDE integration
- Eclipse 3.3: YourKit Java Profiler plugin can now co-exist with TPTP plugin
- Eclipse 3.3: Profile actions are automatically enabled in perspective
- Eclipse 3.3: supported profiling of JUnit plugin tests
- Eclipse 3.3: J2EE servers can be started with profiler from within Eclipse (needs WTP)
- localized (non-English) Eclipse supported
- NetBeans 6 milestone 10 supported
- IntelliJ IDEA 7.0 supported
- Monitor profiling from startup can be configured in the plugin UI
J2EE integration
- WebLogic 10 supported
- Tomcat 6 supported
-
Workaround provided: JBoss 3.2.5 and 3.2.6 (and maybe older) failed to start with profiling on Java 6 because of the incorrect way these versions of JBoss initialized their custom MBeans. To work around the problem, replace "-agentlib:yjpagent=sessionname=JBoss" in the startup script with "-agentlib:yjpagent=delay=10000,sessionname=JBoss", where 10000 is the time in milliseconds that profiler should wait before starting gathering any profiling information, in order to give JBoss time to finish its own initialization (use values bigger than 10000 if 10000 is not enough in your case).
Note that there's no problem in JBoss 3.2.8 SP1, thus the delay is not needed.
UI
- UI changes: toolbar
-
New feature: "Open Snapshot" dialog improves handling of snapshot files:
- automatic detection of snapshots in default snapshot directory, as well in directories from where snapshots were ever opened
- ability to mark snapshots that might be useful in the future as "archived"; UI has an option to show/hide archived snapshots
- ability to rename snapshots
- filtering shown snapshots by name pattern
- grouping snapshots by session
- sorting snapshots by date, name or session
- Connection dialog: option to stop a search for profiled applications
- Deobfuscator and snapshot annotations moved to the Summary panel
- Left panels can be collapsed to give more horizontal space for the results
- More "slave" views for some "master" views
Other
- Agent internals refactored to achieve better performance, reliability, performance and maintainability. In particular, agent will better handle the situations when there's not enough memory to store profiling results.
- Compatibility note: version 7.0 UI doesn't connect to profiled applications with profiler agents of older versions of the profiler, and vice versa. CPU and memory snapshots captured by older versions can still be opened with version 7.0.
- Overall stability and performance improvements
- API: changes reflecting new features of the version 7.0 such as monitor profiling and object generations
- If thread name is changed after the thread creation via Thread.setName(), the change is reflected in the profiling results
- Profiler agent can listen to particular IP address only (via command line option, e.g. -agentlib:yjpagent=listen=192.168.0.1:10000)
- Periodic snapshots: smaller periods are available in UI
- Periodic snapshots: if CPU or monitors is being recorded at the moment of capture, recorded data will be available in resulting snapshots
- Remote connections via local ssh tunneled ports are properly detected as remote
- Deobfuscator configuration is now available on the "Summary" tab. Deobfuscator works with both live views and saved snapshots.
- Better detection of local profiled applications
- Internal improvements and optimizations


