If a Java-level deadlock happens in the profiled application, it will be automatically detected.
When you are connected to the profiled application, switch to the "Deadlocks" tab.
If the deadlock is found, a notification will be shown. Find the deadlock detail in the "Deadlocks" tab.
The profile can detect deadlocks which are not otherwise reported by standard Java mechanism which detects only Java-level deadlocks, but does not detect deadlocks of Java threads caused by JVM internal locks (e.g. class loader) or native methods which explicitly use low-level synchronization primitives.
An heuristics detects threads whose stack does not changed for some period of time, which is a sign of potential deadlock or hung thread.
Well-known cases when thread can legally stay in same state for a long time are excluded. In particular, it can be threads which are waiting for incoming connection in ServerSocket.accept(), some JVM internal threads etc.
Important: the potential deadlock detection depends on thread stack telemetry. If thread state telemetry is disabled, the detection is not possible.
Note: potential deadlocks are not necessarily actual deadlocks. It is possible that the reported threads are performing the same operation for a long time, and will eventually finish. Use "Refresh" button to check if detected threads are still considered frozen.