CSR (Compatibility and Specification Review) JDK-8224601 [“Provide VM.events diagnostic command”] is implemented in JDK 13 as of JDK 13 Early-Access Build #24 (dated 2019/6/6) and was added via Enhancement JDK-8224600 [“Provide VM.events command”]. The CSR‘s “Summary” describes this enhancement: “Add a VM.events command to jcmd to display event logs.” The CSR’s “Solution” states, “Add a command to jcmd to print out event logs. The proposed name is ‘VM.events‘.”
The “Problem” section of CSR JDK-8224601 explains the value achieved from adding
VM.events to the already multi-functioning jcmd: “Event logs are a valuable problem analysis tool. Right now the only way to see them is via hs-err file in case the VM died, or as part of the VM.info output.”
To demonstrate jcmd‘s new
VM.events in action, I downloaded JDK 13 Early Access Build #24 and used it to compile a simple, contrived Java application that I could then run
jcmd tool delivered with that same JDK 13 Early Access Build #24 against.
The first screen snapshot shown here demonstrates using
jcmd to detect the PID of the simple Java application and using
jcmd <pid> help to see what
jcmd options are available for that particular running Java process. The presence of
VM.events is highlighted.
The next screen snapshot demonstrates applying
jcmd <pid> help VM.events to see the usage (including available options) for the newly added
The final screen snapshot demonstrates application of
VM.events command by showing the top (most) portion of the output from running that command without any options.
The options for the
VM.events command are to narrow down results to a specified log to be printed or to limit the number of events shown. By not specifying any options, I was implicitly requesting the default of all logs and all events.
In the last displayed screen snapshot, we could see that types of JVM events rendered in the output include “compilation events“, “deoptimization events“, garbage collection events, classes unloaded, classes redefined, and classes loaded.
I have been a big fan of jcmd for a number of years and believe it is still generally an underappreciated command-line tool for many Java developers. The addition of the VM.events command in JDK 13 makes the tool even more useful for diagnosing a wider variety of issues.