What's New in JMC 9? - Sip of Java
Billy Korando on April 21, 2024Binaries 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!