Skip to content

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.ThreadEnd
  • jdk.JavaMonitorEnter, jdk.JavaMonitorWait, jdk.ThreadPark
  • jdk.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.