The JDI provides introspective access to a running virtual machine's state, Class, Array, Interface, and primitive types, and instances of those types.
The JDI also provides explicit control over a virtual machine's execution. The ability to suspend and resume threads, and to set breakpoints, watchpoints, ... Notification of exceptions, class loading, thread creation... The ability to inspect a suspended threads state, local variables, stack backtrace...