Since the release
of Java 8 in March of 2014, discussions around what’s next for Java 9
have begun to steadily grow. 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 September
2016. 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.
jShell:
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.
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 suite extending 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.
For all those excited yet impatient and looking to get hands on, the
latest JDK 9 builds can be accessible from here: https://jdk9.java.net/download/
No comments:
Post a Comment