Fully featured low overhead profiler for Java EE
and Java SE platforms.
Overview & Features Download Buy & Upgrade
Easy to use performance and memory profiler for .NET framework.
Supports ASP.NET, Silverlight, .NET Windows services and more.
Overview & Features Download Buy & Upgrade

Early Access Program

YourKit Early Access Program (EAP) is the easiest way to get in touch with the latest technologies from YourKit. You can have early access to new products and internal builds.



Your comments, suggestions and bug reports are welcome. In the forum you can discuss product features with YourKit developers and post bug reports.

YourKit Java Profiler 2016.06 EAP

Build #37, released on January 16, 2017

Windows (x86, x64) Download and run installer
Mac OS X (Intel) Download and unpack zipped application
(x86, x64, ARMv5, ARMv7, AArch64, ppc, ppc64, ppc64le)
Download and unpack ZIP archive
Launch bin/yjp.sh
Solaris (SPARC, x86, x64)
HP-UX (IA64)
AIX (ppc, ppc64)
FreeBSD (x86, x64)

Changes in build 37

  • Threads view: improvements
  • Events: special icons for web, database, JNDI and other events
  • Bug fixed: java.lang.ClassCastException in the built-in probe Servlets

Changes in build 36

  • Threads view reworked, now shows events alongside thread states
  • Attach mode: the instrumentation of classes loaded before the agent attached, which happens when CPU tracing or object allocation recording start for the first time, processes classes in batches instead of processing all at once, thus replacing one long stop-the-world pause with a series of shorter pauses

Changes in build 35

  • "Java EE statistics" view: added ability to open the longest event in "Events"

Changes in build 34

  • Events: new inspection "Queries can be prepared" finds similar SQL queries that can potentially be optimized by using a prepared statement.

Changes in build 33

  • Events: new inspection "Statements opened but not accessed"

Changes in build 32

  • Object explorer: class-specific object presentation: GNU Trove library collections supported

Changes in build 31

  • Memory profiling: Class list view now shows separate entries for classes with the same name but loaded in different loaders, as well as presents class loader information for each class loaded not with the system class loader.
  • Memory profiling: class loader presentation improved: if there are multiple class loaders that are instances of the same class (e.g. java.net.URLClassLoader), they are indicated in the UI with an index starting with 1, which allows to easily distinct them. The index itself does not have any physical meaning.

Changes in build 30

  • Memory profiling: new inspection "Inefficient primitive data type usage" finds situations when unnecessarily large primitive data type is used to store values that might fit a smaller data type instead, e.g. when long is used instead of int, or int instead of byte. Such usage might result in memory waste. The inspection analyses long, int, short as well as long[], int[], short[] instance fields per class, as well as standalone long[], int[], short[] arrays.
  • Memory profiling: new inspection "Collections with biggest storage overhead" finds collections with biggest memory usage overhead of storing their elements.
  • Mac OS X: Java parameters for the profiler UI are now specified in ~/.yjp/ui.ini just like on all other supported platforms; previously it was required to modify the application's Info.plist to change the parameters.
  • Optimization: snapshot loading speed was greatly improved for performance snapshots

Changes in builds 10-29

User interface

  • New feature: ability to expand particular filtered branch in call tree views.

    Expansions of filtered calls can be undone one by one by using the popup menu action "Undo" or Ctrl+Z.

  • New action "Show File in Explorer" on Windows, "Show File in Finder" on Mac OS X, and "Show in File Manager" on Linux and other platforms superseded previously existing action "Open Containing Folder". This new action not only opens corresponding directory in the OS-specific file manager, but also selects the target file in it.
  • Native thread ID is now shown as a decimal number instead of hex. Also, the ID was improperly obtained on Windows and Mac OS X: an internal system call ID was used instead of a "presentable" thread ID as seen in system logs or the platforms' specific tools.

CPU profiling

  • Call tree view directly shows web, database, JNDI events under the method call where they happened.

    You can open the longest individual event by clicking the hyperlink. As the result, the event will reveal in "Events".

  • CPU tracing result accuracy increased in some corner cases thanks to improved time measurement algorithms
  • Action "CPU | View Method By Name..." (Ctrl+Shift+N): currently selected method is now preselected in the chooser popup
  • Own time column in call tree views was removed as redundant. To return it specify -Dyjp.own.time.column=true in <user home>/.yjp/ui.ini.

Memory profiling

  • Optimization: up to 30% improvement of memory snapshot loading time on multiprocessor machines
  • Object explorer: key and value are immediately shown for map entries. Also, the action "Open map keys, values, entries in a new tab" available for map objects now by default offers to open entries, not keys.
  • Object explorer: class loader and, if available, web application information is immediately shown for instances of java.lang.Class
  • Object explorer: class-specific object presentation: java.time.* supported
  • Object explorer: class-specific object presentation: java.awt.Color supported: color components (red/green/blue/alpha) as well as the color itself are presented
  • Object explorer: empty strings are indicated with "" to distinct them from strings with unknown content for which no text is displayed. Previously, there was no text shown in both cases. Note: the content is unknown for unreachable strings in *.snapshot files due to a limitation of JVMTI (JVM profiling API) that provides no access to reference fields of unreachable objects. There is no problem for HPROF snapshots which presents references for all objects including unreachable.
  • New action "Memory | Objects by Field Value... (Ctrl+Shift+F)" opens in a new tab objects having particular field values. This allows to find objects of interest among e.g. many other instances of a class. You can specify the field name and exact value or its minimum and maximum value limits. The action can work with all snapshot objects or with objects presented in a current tab.
  • Object allocation recording: toolbar has new button to clear recorded object allocations and continue recording
  • Object allocation recording: action "Memory | View Method By Name..." (Ctrl+Shift+N): currently selected method is now preselected in the chooser popup
  • New inspection "Classes with same name" finds identically named classes loaded in multiple class loaders
  • New inspection "Serializable classes extending non-serializable"
  • New inspection "Non-serializable attributes in HTTP session"
  • New inspection "Not closed resources pending finalization" helps finding resource leaks caused by file streams, random access files, sockets, NIO channels that have not been closed after use
  • New inspection "Thread local variables" helps finding potential memory leaks caused by using java.lang.ThreadLocal
  • Inspection "Non-serializable objects referenced from Serializable" improved: number of false positives reduced
  • Set description language: added tags to specify all objects of particular reachability scope: <strong-reachable/>, <weak-soft-reachable/>, <pending-finalization/>, <unreachable/>
  • If the property -Dyjp.alternate.temp.dir=<directory> is specified it is also respected while calculating the dominator tree which is performed when a memory snapshot is being loaded


  • Threads view: new state "Waiting in native" is shown for some known methods instead of "Running" which is reported for them by the JVM
  • Threads view: new column "Started" shows when particular thread started. Sort by this column to present threads in the order of their appearance.
  • Threads view: new column "Ended" shows when particular thread ended, if ended. Sort by this column to present threads in the order of their termination.
  • New feature: ability to export telemetry graph to .png. You can export entire graph or only its visible part. When exporting a wide graph you have an option to split it to pieces of arbitrary width to limit the resulting image width.
  • New feature: ability to clear the telemetry charts. There is a new toolbar button (3rd from the right), new profiler API method com.yourkit.api.Controller.clearCharts(), and a new command line tool command.
  • New startup options to control exception telemetry:
    • exceptions=on enables exception events in the JVM and immediately starts recording the exception telemetry. This is the default mode on Sun/Oracle HotSpot, OpenJDK, JRockit (i.e. non-IBM JVMs).
    • exceptions=off enables exception events in the JVM but does not immediately start recording the exception telemetry that can instead be recorded later in runtime.
    • exceptions=disable fully disables exception events in the JVM to totally eliminate corresponding overhead. This is the default mode on IBM JVMs because the overhead is significant.
    Caveat: in previous versions of the profiler the startup option disableexceptiontelemetry, being specified explicitly or implied with disableall, worked for the non-IBM JVMs as the newly introduced option exceptions=off. Now disableexceptiontelemetry is an alias of exceptions=disable.

Java EE integration

  • Java EE server integration wizard: JBoss/WildFly domain mode supported

IDE integration

  • IntelliJ IDEA 2016.3 supported
  • NetBeans 8.2 supported
  • Eclipse and IntelliJ IDEA: if multiple projects are opened in the IDE, the "Open in IDE" action opens the symbol in appropriate one by matching the IDE's project name. This works for applications started from within the IDE with the "Profile" action, as well as for captured snapshots of such applications.


  • Attach mode: the initial pause significantly decreased by not automatically marking an object generation
  • Agent: to reduce profiling overhead in profiled applications running many threads, the automatic deadlock detector can be turned off by specifying the startup option deadlocks=off (implied by disableall)
  • Agent: web interface: new action "Dump Threads"
  • Agent: optimization: reduced overhead in profiled applications intensively starting new threads
  • Agent: intrinsic atomic operations are employed on HP-UX too, thus improving performance
  • Windows installer: the version of NSIS was upgraded to improve user experience on latest Windows versions
  • Windows installer: improved diagnostics of insufficient disk space on target drive
  • Windows: the profiler agent library yjpagent.dll is digitally signed.
  • Export: improvement: size of generated HTML files significantly reduced
  • Remote profiling: bug fixed: the profiler did not detect situations when the profiled application quickly restarted and continued to listen on the same agent port, erroneously treating the profiling results coming from the new instance as belonging to the old instance. This might cause different sorts of data inconsistencies and errors in UI.
  • Automatic deobfuscation: yGuard: bug fixed: some class name were not properly deobfuscated
  • Other bug fixes