Fully featured low overhead profiler for Java EE
and Java SE platforms.
Easy to use performance and memory profiler for .NET framework.
Supports ASP.NET, Silverlight, .NET Windows services and more.
Changes in version 9.0

New Feature: Probes

  • Get almost unlimited capabilities to analyze issues specific to your particular application, as well as automatically recognize problems typical to wide range of applications.

    Read more....

Memory Profiling

  • New feature: UI: ability to ignore particular references in paths. This feature is a great aid when investigating memory leaks, because it immediately shows whether nulling particular reference eliminates the leak, and if not, which remaining references you should also consider.

  • New feature: per-memory pool telemetry
  • New feature: ability to open Android HPROF snapshots, converted to standard format with Android's hprof-conv utility
  • New feature: UI: Class hierarchy slave view shows super and derived classes for given class

  • New feature: UI: Class list has new slave view "Class statics" for browsing static fields and constant pool references of selected class

  • New feature: UI: action Memory | View Selected Objects Class (also available in popup menus) opens classes (java.lang.Class instances) for selected object(s)
  • New feature: startup option disableoomedumper to disable on OutOfMemoryError snapshots
  • Improvement: memory snapshots contain values of primitive types on Mac OS X too
  • Improvement: ability to capture HPROF snapshot with JVM built-in dumper is now available on Mac OS X too
  • Improvement: HPROF snapshots: object shallow sizes are calculated more accurately, taking into account some tricky cases of field alignment in memory
  • Improvement: thread, stack and local variable name information will be available for "Stack local" roots even if profiled application runs with debugger. In previous versions, this information was not available running with debugger.
  • Problem solved: JRockit: improved handling of incorrect data provided by JRockit JVM under some rare circumstances, which could lead to crashes on memory snapshot capture. JRockit R27.5.6 is affected. It is possible that earlier versions of JRockit are also affected.
  • Problem solved: thread name was not shown for some thread objects (i.e. instances of java.lang.Thread or subclasses) in reference explorers

CPU Profiling

  • New feature: "What-if": analyze CPU profiling results, ignoring particular methods or focusing on particular methods only
  • New feature: CPU usage estimation: estimate CPU usage in given time range, basing on available stack trace telemetry:
  • New feature: "Method list" is available in live view, in addition to "Call tree"

  • New feature: CPU tracing: calibration helps to compensate CPU tracing overhead, excluding it from profiling results. The overhead is different for different platforms, JVM versions, vendors, for 32-bit and 64-bit JVMs, and can even depend on JVM options. The calibration is automatically performed for each running JVM instance, when CPU tracing is started first time. It takes approximately 1-2 seconds.
  • Improvement: CPU tracing: Mac OS X: native methods are included to the profiling results
  • Problem solved: defective CPU tracing results could be produced on some Linux configurations due to incorrect thread execution times reported by operating system


  • Telemetry: an option to see time as clock (system time in profiled system) in addition to uptime (time passed since profiled application start). Switch the mode via graph's popup menu.

Java EE Integration

  • New feature: GlassFish 3 supported
  • Improvement: simplified profiling of applications running inside an OSGi container: there is no need to manually tweak OSGi settings anymore to allow loading of the profiler classes
  • Improvement: Java EE Statistics: an option to show/hide calls whose execution took less than 1 ms
  • Improvement: Tomcat 6 support improved

IDE Integration

  • New feature: NetBeans 6.8 supported
  • New feature: MyEclipse 8.5 supported
  • Improvement: integration wizard improved to handle some NetBeans configurations
  • Improvement: it is now possible to specify in the plugin UI whether a 32-bit Java or a 64-bit Java is used to launch profiled application, in order to choose appropriate profiler agent. Previously, it was required to re-run IDE integration wizard to change the JVM kind. Also, it is now possible to choose Java kind per run configuration in IDEs which provide such capabilities (Eclipse, IDEA). See tab "32-bit or 64-bit Java Selection" in the plugin configuration UI.

    For example, see how the configuration looks in Eclipse:

    ... and in NetBeans:

    Of course, IDEA and JDeveloper are also supported.

User Interface

  • New feature: Welcome screen: "Monitor Local Applications" panel provides the option "Show all running JVMs" to see all Java applications running on the machine, including those not started with the profiler agent. This helps troubleshooting possible connection problems.

  • New feature: table columns are resizeable, and if column content does not fit, a scroller appears. Also, wide tables are scrollable themselves, like tables in spreadsheet applications.

    This dramatically improves usability working with Probes results.

    Another view to mention which will greatly benefit from this feature is Threads where very long thread names will not be cut off anymore.

  • New feature: Summary tab: list of all system properties is available ("System properties")
  • Improvement: Quick info: an option to see non-filtered stack traces
  • Improvement: graphs are filled with color
  • Improvement: profiler events such as switching profiling modes, starting/stopping profiling, capturing snapshots etc. are now logged to the log file, as well as are available in "Probes" tab in "Messages" table (categories "Profiler" and "Profiler UI")
  • Improvement: Summary tab: Java version is shown with all available VM detail
  • Improvement: desktop integration on Mac OS X: ability to open exported files


  • New feature: HP-UX supported. Running profiled applications and/or the profiler UI is now supported on HP-UX on IA64 architecture. Both 32-bit and 64-bit JVMs are supported.
  • New feature: ability to export basic snapshot views to *.csv, *.txt, *.html via a command line tool. For detail, see "Export with command line tool" here.
  • New feature: Settings | Snapshot Directory... configures snapshot directory location. Read more...
  • New feature: now it is possible to combine exclusive and inclusive filter patterns, i.e. to specify classes which must be filtered as well as classes which must not be filtered. In the latest case, prepend the pattern with "+". For example, org.apache.*,+org.apache.jsp.* will filter out Tomcat internals, but will not filter classes of particular JSP pages, which Tomcat generates in package org.apache.jsp.
  • New feature: profiler agent log is written to file <user home>/.yjp/log/<PID>.log instead of stderr. Successfully started agent writes to stderr only the following line: [YourKit Java Profiler <version>] Loaded. Log file: <full path to the log file>

    With this new approach, the profiler agent log messages are easier to find if profiled application redirects its output to own log files or filters it, and will not be lost if the output goes directly to console, or if there is no console at all if the profiled application runs as a service. Also, the profiled application's output and its own log files are not cluttered with extra messages.

  • New feature: periodic snapshot trigger offers an option to choose the kind of snapshot to capture: performance, memory in *.snapshot format or memory in HPROF format. Previously, the periodic snapshot trigger only captured memory snapshots in *.snapshot format.

    In particular, this feature helps to monitor long running applications. By default, telemetry buffer capacity is approximately 1 hour, and older telemetry is not available. Instead of increasing the telemetry buffer capacity with "telemetrylimit" startup option, you can periodically capture performance snapshots to ensure that that oldest telemetry will not be lost.

  • New feature: API: com.yourkit.api.Controller: added methods clearCPUData(), clearAllocationData(), clearExceptions(), clearMonitorData()
  • Improvement: periodic snapshot trigger can be turned on from the start with the help of startup options periodicperf=<period>, periodicmem=<period>, periodichprof=<period>
  • Improvement: Windows installer detects previously installed builds and offers to automatically uninstall them before installing the new one
  • Improvement: API: return type of com.yourkit.api.MemorySnapshot.getShallowSize() changed from int to long
  • Improvement: API: com.yourkit.api.Controller.startCPUProfiling() can be instructed to use current filter and wall time settings stored in user home, by passing 'null' as parameters
  • Improvement: Command line tool to control profiling: when using "start-cpu-sampling" or "start-cpu-tracing" commands, current filter and wall time settings are read from user home, instead of always using default settings.
  • Improvement: profiler UI settings can be specified in bin/yjp.ini on all platforms. Previously, it was required to modify different files on different platforms.
  • Improvement: non-Windows: improved diagnostic on attempt to start with an outdated Java version
  • Improvement: Solaris: automatically starts the profiler UI with a 64-bit JVM if it is available
  • Optimization: bytecode instrumentation improvements
  • Caveat: only applications running on Java 6 or newer can be profiled. New functionality provided by this version of the profiler requires Java 6 APIs which are not available in earlier Java versions. For profiling Java 5 applications, please use YourKit Java Profiler 8.0.
  • Problem solved: applications using scala might fail starting with the profiler, due to some odd bytecode patterns generated by scala compiler
  • Problem solved: profiled application startup might fail using some builds of IBM Java 6 (e.g. some bundled with WebSphere)
  • Bug fixed: profiled application might not start if its process identifier (PID) was bigger than 65536.