Changes in version 6.0 from 5.0:



See also changes in:   6.0.x builds

Memory Profiling

  • New feature: new metrics "Distance to nearest GC root" is shown in Quick info for individual objects
  • New feature: new inspection Objects with biggest distance to nearest GC root helps finding longest chains of objects such as linked lists, queues, trees etc.
  • New feature: new inspection Duplicate Arrays finds potential memory waste
  • Improvement: first elements of primitive arrays are immediately shown in object explorers
  • Improvement: default number of array elements shown in object explorer (20) can be changed adding -Dyjp.array.elements.to.show=value in <Profiler Installation Directory>\bin\profiler.ini However, note that showing too many elements can make the UI slower when browsing big arrays.
  • Improvement: if Class hierarchy is shown for a single object which is a class itself (System.Type), the hierarchy is presented for corresponding class, but not for class System.Type.
  • New feature: action "Memory | Class Itself (System.Type) by Name..." (Ctrl+Shift+C). The new action is similar to "Memory | Instances by Class...", but it opens the class object itself (System.Type) for specified class instead of its instances. This new action can be used to explore class static fields, as well as class loader and super class hierarchy, especially for classes without instances.
  • Improvement: Garbage collection view: in addition to the collected object count and size columns, count and size of existing object columns are shown. Also, context actions such as "Memory | View Selected Objects... (F4)" are available, so you not only can get the numbers, but also browse the existing objects themselves. Note: statistics is shown for all objects in the snapshot; if you need allocation statistics for particular subset of objects, open corresponding objects view and use its "Allocations" section.
  • Improvement: objects view: UI cleanup: allocation views are not cluttered with GCed object statistics anymore, as they are aimed to analyse where particular existing objects were created. To analyse where excessive garbage was produced, use dedicated view Garbage collection instead.
  • Improvement: objects view: slave view "Callees List" for allocations has new columns "Objects (Own)" and "Size (Own)".
  • Improvement: objects view: slave views "Callees List", "Merged Callees" and "Back Traces" for allocations display information about objects which correspond to current selection in master view, but not objects of entire snapshot.
  • Improvement: Quick info shows retained object count as well as retained size

  • Improvement: Quick info shows text presentation for char[] and System.String in scrollable text area. In particular, this allows to inspect long strings.
  • Improvement: Quick info allows to export entire string or primitive array to a file in following formats:

    • char[] and System.String to a text file in UTF-8
    • byte[] to a binary file
    • primitive array values to a text file
  • Improvement: Quick info text presentation is shown initially positioned at beginning of the text. Also, long lines are wrapped.
  • Improvement: Merged paths view speed-up
  • New feature: added ability to open memory snapshots as performance snapshots, i.e. to load all profiling data except for the heap content.

    In particular, memory usage telemetry, object by class counts and allocation information (if recorded) will be available.

    This feature helps working with huge memory snapshots:

    • if your machine is not capable of opening a huge memory snapshot, or opening takes too long, quickly get a look at memory usage statistics, as well as access all other profiling data possibly contained in the snapshot: telemetry graphs, CPU profiling results, exceptions, object allocation statistics etc.
    • the performance snapshot can be extracted to a file for further processing, or transfer to another machine; in case of a limited bandwidth, sending several megabytes instead of gigabytes is a great improvement

    Extracting performance snapshot from the profiler UI

    • To extract performance snapshot from a memory snapshot, select the memory snapshot file in the Open snapshot dialog and use action "Extract Performance Snapshot":

    • On attempt to open a big memory snapshot, the profiler offers an option to open it as a performance snapshot instead:

      If you choose this option, the performance snapshot will be extracted and opened. The effect will be the same as if you would explicitly invoke "Extract Performance Snapshot" and then open the resulting performance snapshot.

    • If you have fully loaded a memory snapshot, you can use File | Extract Performance Snapshot in the main menu to extract a performance snapshot and save it to file.

    Extracting performance snapshots with command line tool

    You can extract performance snapshot using the following command:

    <Profiler Installation Directory>/bin/extract-performance-snapshot.bat <memory_snapshot_file_path>

    Location of the extracted snapshots

    The resulted performance snapshots are created in the snapshot directory.

  • UI: improvement: the configurable number of array elements shown in object explorer now includes only non-null elements. This simplifies browsing of sparse arrays. Also, the default number has been changed to 15, it is configurable via -Dyjp.array.elements.to.show=value in <Profiler Installation Directory>\bin\profiler.ini.

CPU Profiling

  • Improvement: UI cleanup: slave views "Merged Callees" and "Back Traces" are shown for master views "Hot spots" and "Method lists" only, but not for "Call Tree" views, where they were useless. Should you need to quickly get information about all calls of the method selected in call tree, use actions "CPU | (View) Method Merged Callees in New Tab (Ctrl+M)", "CPU | (View) Method Back Traces in New Tab (Ctrl+Shift+M)" and "CPU | (View) Method by Name... (Ctrl+Shift+N)".
  • Wall time settings format has been changed to allow method parameter specification.
  • Improvement: added startup option deadthreadlimit to customize the number of recently finished threads for which CPU sampling or CPU tracing results are kept (the default value is 50). Profiling results for the finished threads beyond this limit are merged to <Oldest finished threads> pseudo-thread node. The intention is to limit collected data size when profiling applications constantly creating new short living threads.

Telemetry

  • New feature: Threads view has an option to show all threads, only live threads or only finished threads.

  • Improvement: Threads view: Copy to clipboard action allows to copy strings containing character with code 0 (C-style string terminator). Previously, such strings were truncated.
  • Bug fixed: Threads view: scroller position might get lost on resize
  • Bug fixed: Threads view: "Stack Traces" tab might not update properly with "Show stack of selected thread only" selected
  • New feature: added ability to filter Threads view by method.

    If method pattern is specified (it can be class name and/or method name and/or signature), samples with matching stacks are marked.

    There is an option to show only the threads with matching stacks.

    Also, the method filter affects the threads shown in the Stack traces tab, as well as the CPU Usage Estimation.

    CPU usage estimation provides an option to account samples in either all threads in the selected range or only in those matching the thread and method filter

  • Improvement: CPU usage and time spent in garbage collector are shown on the same graph, indicating CPU usage peaks caused by the garbage collector activities.
  • Improvement: when a time range is selected in a graph or in the threads view, its duration is shown in addition to its time bounds
  • Improvement: Threads view: copy to clipboard action copies the selected thread's name
  • Improvement: more graph scale gradations available
  • Bug fixed: exceptions tree collapsed on each update

User Interface

  • Improvement: to save vertical space for other components, the help bar height was reduced. Also, there is an option to hide the help bar ("Settings | Show Help Bar") and/or the status bar ("Settings | Show Status Bar")

  • Improvement: "Thread name" filter in "Threads" tab (and similar filters in other views) now optionally accepts full regular expression syntax
  • Improvement: before starting opening a memory snapshot, the profiler checks whether available disk space is enough to create temporary files needed to open the snapshot. If the available space is not enough, a warning is shown, as well as instructions on how to specify alternate temporary directory (e.g. on another disk).
  • New feature: added popup menu item "Fully Expand Node" in call tree and back traces views
  • Improvement: added ability to explicitly specify file name when capturing a snapshot

  • Improvement: snapshot renamed from within "Open Snapshot" dialog will not disappear from the list of recently opened snapshots
  • Improved logic of own-value columns (own time in CPU view; own count and size in object allocation and garbage collection views).

    The filter settings are taken into consideration: own value for some method call is now calculated as its aggregate value minus the value of only shown subcalls.

    As the result, views like method list much better present results for library methods (usually filtered) which delegate to other library methods. Now, calls to library methods from your application's code will get non-zero own values thus making sorting by own value column a very useful tool.

    Also, this change makes own time in CPU sampling results more coherent with CPU tracing results of same application.

  • Improvement: ensured consistency of results shown in different views for filtered methods which are called from both other filtered methods and from non-filtered methods.

    Example: a core library method was invoked 5 times in total; 3 times it was invoked directly from your application's code and 2 times indirectly from other library methods. Method list view would previously show 3 calls only, while merged call tree - all the 5 calls. Now, the method list also shows all the 5 calls.

  • Improvement: if there are several snapshots captured in background, the notification popup window will be shown for the latest snapshot only. This prevents UI clutter with multiple notification windows if the periodical snapshot capture trigger is activated with small period and/or the profiled application has been running for a long time and thus many such snapshots have been captured.
  • Improvement: Summary tab better fits low resolution displays
  • Improvement: if a menu item has additional description, it is shown as a tooltip. The status bar where it was previously shown is removed to save vertical space which is important on low resolution displays.
  • Improvement: to customize the number of levels automatically expanded in trees when clicking [+] or using arrow key, specify -Dyjp.levels.to.expand=number in <Profiler Installation Directory>\bin\profiler.ini.
  • Bug fixed: closing windows with ESC key might not work under certain conditions
  • Bug fixed: error dialog was shown if there were more than 100 locally running applications detected
  • Bug fixed: tooltips might stay shown for a long time even after mouse exited corresponding components
  • Bug fixed: merged call tree might not be fully shown depending on applied filters

Miscellaneous

  • Improvement: filters: added ability to include or exclude not only entire classes or packages, but also particular methods. Read more...
  • Export: new feature: added ability to export in XML format
  • Export: improvement: export to CSV generates "Level" column when exporting trees
WATCH DEMOS

WHAT'S NEW
October 10, 2011
YourKit Profiler 6.0 for .NET released Read more »
September 12, 2011
YourKit Java Profiler 10 released Read more »
AWARDS
JDJ Editors' Choice Award Winner YourKit Java Profiler received the Java Developer's Journal Editors' Choice Award.
"I had to collect data about a memory leak that happen over several hours of time in the production server. Using other profilers this was not possible since they kept on crashing. Using YourKit this was amazingly easy. It just ran in the background and I gathered statistics at certain moments in time and then compared them against each-other. YourKit is a really nice profiler and I use it now."
Geert Bevin,
Lead developer of RIFE
web application framework