Oracle has launched Java 16 (Oracle JDK 16) which includes 17 new enhancements expected to further improve developer productivity.
According to the software company, Java updates can be expected every six months to provide developers with a predictable release schedule. This offers a steady stream of innovations while also delivering continued performance, stability and security improvements.
“The power of the six-month release cadence was on full display with the latest release,” says Georges Saab, VP of development for Java Platform Group at Oracle.
“Pattern Matching and Records were introduced a year ago as part of JDK 14 and have since gone through multiple rounds of community feedback based on real-world applications. This process has not only given Java developers the opportunity to experiment with these features before they were finalized but also incorporated that critical feedback which has resulted in two rock-solid JEPs that truly meet the needs of the community.”
The Java 16 release is the result of industry-wide development involving open review, weekly builds and extensive collaboration between Oracle engineers and members of the worldwide Java developer community. The new features delivered in Java 16 are:
Language Enhancements First Introduced in JDK 14, Finalized in JDK 16
- JEP 394: Pattern Matching for instanceof – Enhances the Java programming language with pattern matching for the instanceof operator.
- JEP 395: Records – Enhances the Java programming language with records, which are classes that act as transparent carriers for immutable data. Records can be thought of as nominal tuples.
New Tool to Improve Developer Productivity
JEP 392: Packaging Tool – Provides the jpackage tool, for packaging self-contained Java applications.
Improved Memory Management to Improve Performance
- JEP 387: Elastic Metaspace – Returns unused HotSpot class-metadata (i.e., metaspace) memory to the operating system more promptly, reduces metaspace footprint, and simplifies the metaspace code in order to reduce maintenance costs.
- JEP 376: ZGC: Concurrent Thread-Stack Processing – Moves ZGC thread-stack processing from safepoints to a concurrent phase. This work eliminates the last significant bottleneck for allowing concurrent stack processing.
Improved Networking to Improve Developer Productivity and Flexibility
- JEP 380: UNIX-Domain Socket Channels – Adds support for all of the features of UNIX-domain sockets that are common across the major UNIX platforms and Windows to the socket channel and server-socket channel APIs in the java.nio.channels package.
Addressing Future-incompatible Code
- JEP 396: Strongly Encapsulate JDK Internals by Default
- JEP 390: Warnings for Value-Based Classes
Incubating and Preview Features
- JEP 338: Vector API (Incubator) – Provides an initial iteration of an incubator module, jdk.incubator.vector, to express vector computations that reliably compile at runtime to optimal vector hardware instructions on supported CPU architectures.
- JEP 389: Foreign Linker API (Incubator) – Introduces an API that offers statically-typed, pure-Java access to native code.
- JEP 393: Foreign-Memory Access API (Third Incubator) – Introduces an API to allow Java programs to safely and efficiently access foreign memory outside of the Java heap.
- JEP 397: Sealed Classes (Second Preview) – Enhances the Java programming language with sealed classes and interfaces. Sealed classes and interfaces restrict which other classes or interfaces may extend or implement them.
Improvements for OpenJDK Contributors
- JEP 347: Enable C++14 Language Features (in the JDK source code) – Allows the use of C++14 language features in JDK C++ source code, and gives specific guidance about which of those features may be used in HotSpot code.
- JEP 357: Migrate from Mercurial to Git – Migrates the OpenJDK Community’s source code repositories from Mercurial (hg) to Git.
- JEP 369: Migrate to GitHub – Hosts the OpenJDK Community’s Git repositories on GitHub.
New Ports Provide Support for Java on More Platforms
- JEP 386: Alpine Linux Port – Ports the JDK to Alpine Linux, and to other Linux distributions that use musl as their primary C library, on both the x64 and AArch64 architectures.
- JEP 388: Windows/Aarch64 Port – Ports the JDK to Windows/AArch64.
Follow IT News Africa on Twitter