- System requirements
- Profiler architecture
- Running the profiler
- Profiler activation
- Running applications with the profiler
- Connect to profiled application
- Troubleshoot connection problems
- Solving performance problems
- CPU profiling
- Threads
- Deadlock detector
- Memory profiling
- Memory telemetry
- Memory snapshot
- Object allocation recording
- Shallow and retained sizes
- Memory views
- Objects view
- Method merged callees view
- Method back traces view
- Quick info view
- GC roots view
- Leak detection: working with paths
- Memory inspections
- Comparing memory snapshots
- Support of HPROF format snapshots
- Support of Java Flight Recorder (JFR)
- Support of Portable Heap Dumps (.phd)
- Values of primitive types
- Persistent object IDs
- Useful actions
- Set description language
- Garbage collection
- Monitor profiling
- Exception profiling
- Probes: monitor events of various kinds
- Performance Charts
- Inspections: automatic recognition of typical problems
- Automatically trigger actions on event
- Summary, snapshot annotation, automatic deobfuscation
- IDE integration
- Time measurement (CPU time, wall time)
- Filters
- Snapshot directory customization
- Export of profiling results to HTML, CSV, XML, plain text
- Profiler Java API
- Profiler HTTP API
- Command line tool to control profiling
- Settings
- FAQ: How to profile in my scenario?
Leak detection: working with paths
The profiler provides a very powerful way to detect memory leak -
calculation of paths between objects in memory.
A path is a very simple and intuitive concept. A path between Object 1 and Object n
is a sequence of objects where:
- First element is Object 1
- Each element in the sequence, starting with the second one, is referenced from its predecessor
- Last element is Object n
Navigation between the views
When you have found a leaked object and want to fix the memory leak, use paths from GC roots to find out why that object is retained in memory.
To see the paths, select an object and switch to Paths from GC Roots:

You can limit the number of paths to show. It is guaranteed that the shortest paths are shown first, i.e. there are no paths shorter than the ones displayed.
To open the paths in a new tab use Memory | Paths from GC Roots... (Ctrl+P)
Ignoring particular references
You can 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.

Paths between predefined sets
Memory | Paths between Predefined Sets... is the most common way to find out how an object of the source set references objects of the target set.