Internals
JVM Diagnostics
Which JVMTI and JFR events DIXY listens to, and why it combines them.
JVMTI
The native agent (native/src/agent.cpp) enables MonitorContendedEnter and MonitorContendedEntered, so DIXY learns when a thread blocks on a monitor and when it acquires it.
Java Flight Recorder
A JFR recording stream subscribes to:
jdk.ThreadStart,jdk.ThreadEndjdk.JavaMonitorEnter,jdk.JavaMonitorWait,jdk.ThreadParkjdk.VirtualThreadPinned(no threshold)
JFR's JavaMonitorEnter fires after a wait has finished, so DIXY treats it as "wait is over" rather than a live edge — this avoids false cycles.
Thread-state poller
ThreadStatePoller periodically samples thread states to fill in live wait edges.
No self-monitoring
The DIXY application does not attach its own hooks to itself by default: doing so created a feedback loop. The agent is meant for a separate target JVM.