What's New in JMC 9? - Sip of Java

Binaries for JDK Mission Control (JMC) 9 are now available, you can download them here. In this article let’s take a look at some of the key changes in JMC 9.

JMC Requires JDK 17

The most significant change coming in JMC 9 is that JMC now requires JDK 17 or later to run.

However, while JMC requires JDK 17 to run, it can still read JFR recordings from JDK 7u40 or later, as in this example of reading a JFR recording from a simple JDK 7 application.

JMC Updated to Use Eclipse 4.30

JMC has been updated to use Eclipse 4.30, part of the Eclipse 2023-12 project. For more on the changes included in Eclipse 4.30, check this link: https://eclipse.dev/eclipse/news/4.30/

Support for Dark Mode

JMC now supports a dark mode, which can be enabled by going to Settings > General > Appearance and selecting the “Dark” theme.

Configurable JVM Browser

The JVM Browser has been updated so that it is now configurable in terms of how often it checks for new JVMs. To configure the JVM Browser, go to Settings > JDK Mission Control > JVM Browser > Local. The default value is 5000ms, which matches the previously hard-coded value.

Increase to Event Checkpoint Limit

The Event Checkpoint Limit has been updated to grow beyond the u4 limit. This follows a change that was introduced to JFR in JDK 20. For more on this change, read this JBS Issue: https://bugs.openjdk.org/browse/JDK-8298129

Searching Events by Event Type Id

The Event Browser has been updated to allow searching for events by Event Type ID. Additionally, Event Type ID can now be displayed as a column; by default, it is set to hidden.

Using JMC with Native Images

For GraalVM users, in previous versions of JMC, it wasn’t possible to enable JFR on a native image, even if the native image supported JFR. This issue has been resolved in JFR 9.

Flame Graph Update

The Flame Graph will now be rendered using Java Swing. Previously, this graph used an embedded browser. The move to using Java Swing comes with some graphical updates and improvements to performance and model creation.

Rules Engine Updates

JMC has a rules engine that automatically analyzes a JFR recording, checking for potential performance bottlenecks and other issues. The rules engine has been updated in JMC 9 with a few new rules.

G1 Pause Time Rule

The G1 MMU rule checks to see if G1 pause times are above target.

Finalization Statistics

In JDK 18, Finalization was deprecated for removal. This change added a new event type to JFR, jdk.FinalizationStatistics. The new rule, “Finalizers runR” will read this event type to check if an application calls finalize on objects.

Inverted Parallelism

The new “Inverted Parallelism” rule checks how efficiently parallel GCs execute (parallel GCs utilize multiple threads for handling GC work). For more on this rule, check this JBS issue: https://bugs.openjdk.org/browse/JMC-8144

Conclusion

This is only a high-level look at some of the most significant changes in JMC 9. In total, nearly 200 JBS issues were closed as part of JMC 9. You can see all the tickets here. Also, check Marcus Hirt’s article on JMC 9 and other articles, as he covers many topics regarding JMC, performing monitoring, and more. Marcus Hirt was one of the original engineers on what is now JDK Mission Control.

Additional Reading

Download JMC 9 - https://www.oracle.com/java/technologies/javase/products-jmc9-downloads.html

Eclipse 4.30 - New and Noteworthy: https://eclipse.dev/eclipse/news/4.30/

Add a rule to detect GC Inverted Parallelism - https://bugs.openjdk.org/browse/JMC-8144

JDK Mission Control 9.0.0 Released! - Marcus Hirt - http://hirt.se/blog/?p=1477

JBS Issues Resolved in JMC 9: https://bugs.openjdk.org/

JEP 421: Deprecate Finalization for Removal - https://openjdk.org/jeps/421

Let checkpoint event sizes grow beyond u4 limit - https://bugs.openjdk.org/browse/JDK-8298129

Happy coding!