User interface

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 macOS, 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 macOS:
an internal system call ID was used instead of a "presentable" thread ID as seen in system logs or the platforms' specific tools.

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 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.

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.

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.

New action "Memory | Objects by Field Value... (Ctrl+Shift+F)" opens in a new tab objects having particular primitive 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

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 analyzes long, int, short as well as long[], int[], short[] instance fields per class,
as well as standalone long[], int[], short[] arrays.

Telemetry

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: "Started" property shows when particular thread started.
Sort by this property to present threads in the order of their appearance.

Threads view: "Ended" property shows whether particular thread ended, and if it did, when.
Sort by this property 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,
new profiler API method com.yourkit.api.Controller.clearCharts(),
and a new command line tool command.

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.
In this version disableexceptiontelemetry is still accepted and is equal to exceptions=disable.

Scalability improvement:
the stack traces panel shown on clicking a telemetry graph could take much time to appear or update
for a hugh number of threads (hundreds or thousands), leading to a freezing UI.
To tackle this problem the number of shown threads in the stack traces panel is now by default limited to 300.
If the limit is reached, please apply the thread filter in the UI to see particular threads only,
or increase the limit by specifying -Dyk.thread.count.limit=<custom limit> in
<user home>/.yjp/ui.ini.

Java EE integration

IDE integration

Eclipse Neon supported

IntelliJ IDEA 2016.3, 2017 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.

Miscellaneous

Attach mode:
the bytecode 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

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)

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.

macOS: 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.

Scalability: added an option to disable retrieval of object instance count by class statistics
when capturing performance snapshots (available in performance snapshots under "Memory", "Memory & GC Telemetry")
which in some cases may take noticeable time depending on heap size.

To disable the statistics when capturing performance snapshots from the profiler UI,
add the line -Dyk.instance.count.on.perf.snapshot.capture=false
to <user home>/.yjp/ui.ini