Thursday, 15 September 2016

What’s exciting about Java 9 and Application Performance Monitoring

In today’s modern computing age, constant enhancements in software innovations are driving us closer to an era of software revolution. Perhaps in the distant future, that may be how the 21st century is remembered best. Among the popular software languages out there, however, Java continues to have the largest industry footprint, running applications around the globe producing combined annual revenue in trillions. That’s why keeping up on the JDK is a high priority. Despite having a massive API to improve programming productivity, Java has also grown due to its high performance yet scalable JVM runtime, building among the fastest computing modern applications. As Java’s footprint expands, JDK innovations continue to impact billions of lines of code. As AppDynamics continues to grow, our focus towards supporting Java is only furthered by our customer use & industry adoption of the JVM.


Although various JDK enhancements were originally targeted for Java 9, the scope of committed work has gradually narrowed with an upcoming proposed release date of Spring 2017. With over 30 key enhancements presently targeted, the ones with potential for broadest impact will be shared.
Project Jigsaw:

Among the largest impacting JDK 9 enhancements are from Project Jigsaw. Jigsaw’s primary goal is to make the JDK more modular whereby also enhancing the build system. It is motivated by the need for making Java more scalable for smaller computing devices, secure, performant, and to improve developer productivity. With the advent of the Internet of Things (IoT), enabling Java to run on smaller devices is instrumental for continued growth. However as Java’s footprint expands, its more prone to security targeting and performance issues as a nature of running on a vast permutation of computing services. Thus with a more modular JDK, developers can significantly reduce necessary libraries needed to build features, whereby reducing security risks as well as making the applications smaller with better performance (ie. improving code cache & class loader footprint, etc).

HTTP/2 Client: 

Among the most popular web protocols, HTTP has been getting its own upgrade to HTTP/2 (with inspiration from Google’s SPDY/2), boasting significant network performance gains. Hence, Java 9 will get its own HTTP client API implementing HTTP/2 and WebSocket to replace the legacy HttpURLConnection, which predates HTTP/1.1 and has various limitation such as the one thread per request/ response behavior. Using HTTP/2 in Java 9, applications will have better performance & scalability with memory usage on par or lower than HttpURLConnection, Apache HttpClient, and Netty.


Also being referred to as Java RPEL (Read-Print-Eval-Loop), JDK9 users will be getting a shell like interface to interactively evaluate declarations, statements, and expressions in Java. Similar to the Python or Ruby interpreters or other JVM languages like Scala and Groovy, Java users will be able to run Java code without needing to wrap in classes or methods, allowing for a much easier, faster learning & experimentation. Furthermore, as Java has been moving towards becoming a less syntactically verbose language with features like Lambda introduced in JDK 8 (shared in our Java 8 blog last year), having a shell-like interface becomes more practical for ad-hoc testing.

What’s exciting about Java 9 and Application Performance Monitoring

The JVM Code Cache is critical to application performance and can be set at startup time using the following flag: -XX:InitialCodeCacheSize=32m. When the code cache memory is exhausted, the JVM losses JIT and goes into interpreted mode, significantly affecting application runtime performance. In Java 9, this section of memory is getting divided into the following 3 distinct heap segments in order to improve performance and enable future extensions: JVM internal (non-method) code, Profiled-code, Non-profiled code.

Notable mentions:

Some other notable changes in JDK 9 will include making the G1 collector default, adding a Microbenchmark testing suiteextending the current JMH, and the removal of some aged unsupported performance tools such as JVM TI hprof and jHat.

Although most programming languages tend to come and go, Java is one that’s here to stay (least for the foreseeable decade). As one of the most popular and widely adopted languages with a high performant, scalable runtime, innovations towards the JDK have a large impact on the world’s computing infrastructure. By staying current with what’s in the next JDK, firms running JVM services can intelligently plan & prioritize their innovation initiatives that are complementary to languages improvements.