We are excited to announce full support for Java 9 as part of our Winter ‘17 product release. Java 9 introduces some interesting features such as incubator support for HTTP/2 and making the G1 Garbage Collector (GC) the default GC for the Java virtual machine (JVM). But the most fundamental change that impacted all Java performance monitors and profilers is its modularization support.
Specifically, Java 9 includes a feature called “Jigsaw” which provides support for the Java module system. The implementation of modules within the JVM presents unique challenges to our Java monitoring agent, as it further restricts access to packages, classes, and interfaces that we leveraged in earlier Java releases.
Here are the challenges posed by the Java modularization feature, and the stringent requirements we met to remain leaders in this space:
– The same binaries (jar files) should be used for Java 9 and older releases of Java. Users should not have to switch agent binaries or modify command line arguments when moving from one Java release to another.
– The user should not have to provide additional command line arguments for Java 9. A single command line argument, “-javaagent” is all that is required to introduce the Java agent into a JVM.
– Preserve support for dynamic attach by our agent into a running JVM.
– The implementation should be consistent with the ‘spirit’ of Java modularization. The monitoring agent should be defined as a named Java module.
– Access to restricted Java modules should be acquired dynamically, and should be limited to the monitoring agent module only. We should not create integrity or security exposures in the JVM by opening up access too broadly.
– Exploit modularization by allowing users to select Java methods for instrumentation based not only upon class and method name, but on module name as well.
During the initial design and implementation of modularization support within the monitoring agent, we were working with early drivers of Jigsaw, which, as it turned out, had a more restrictive set of features than those that eventually appeared in the GA release of Java 9. In the event that the more restrictive controls are put back in future releases of Java, the AppDynamics Java monitor should be ready.
Java Application Performance Monitoring was the first monitoring solution offered by AppDynamics, and is still one of its flagship products. We are committed to keeping pace with both our customers’ innovations and those in the Java ecosystem. With the implementation of our Java 9 support, we have again demonstrated that commitment. Our product not only provides tolerance and support for Java 9, but it also goes a long way towards exploiting the new capabilities that Java 9 offers.
Ryan TerBush is a co-author of this blog post. Ryan is a senior software engineer that has been with AppDynamics 2.5 years. He has an MEng degree in EE/CS from MIT. When he’s not fixing things at work, he’s most likely swimming or gaming.