Oracle releases Java updates regularly every six months to provide developers with sustained performance, stability, and security enhancements. Java is already a powerful programming language and the preferred platform for developers. Oracle has announced Java v16 with new enhancements that include memory management, language improvements, preview features, and much more. With all of these, Java 16 demonstrates Java’s journey of continued innovation.
In addition to various stability, performance, and security updates, Java 16 has offered users seventeen major enhancements that include three incubator models and one preview feature. A few enhancements have been introduced in Incubator models. Developers can use such non-final tools and APIs to provide feedback which will ultimately boost the quality of the Java platform.
On the other hand, some enhancements have been introduced as Preview features(or VM features). These are entirely specified and implemented but are impermanent. As they are available in the JDK feature releases, they are intended to provoke feedback upon real-world use. Based on it, the tool vendors can build feature supports and they can become permanent in future releases.
The 17 JEPs that are delivered with Java 16 can be categorized into six distinct categories:
1. JVM Improvements
- JEP 376 ZGC Concurrent Thread Processing
ZGC thread-stack processing gets moved from safe points to concurrent phases by JEP 376. It facilitates sub-millisecond pauses with the GC safe points even on the large heaps. Removal of the final latency source within the garbage collector of ZGC significantly improves the efficiency and performance of applications.
- JEP 387 Elastic Metaspace
Unutilized Hotspot VM class-metaspace(or metadata) memory is returned to the OS quickly with this feature. This reduces the footprint of the metaspace. Applications that have substantial class loading/unloading activity can generate plenty of unutilized space. Metaspace memory is allocated in smaller chunks by the new scheme which minimizes class-loader fragmentation. Elasticity is improved as unutilized metaspace is returned to the operating system. This results in better application performance.
2. New Tools & Libraries
- JEP 380 Unix-domain Socket Channels
Most Unix platforms have featured Unix-domain sockets for a long time and presently, they are also supported in Windows Server 2019 and Windows 10. Now, server-socket channel and socket channel APIs get socket support(Unix-domain (AF_UNIX)) with this feature in the java.nio.channels package. It lends support to the inherited channel mechanism.
First introduced as an incubator module with the release of Java 14, this tool facilitates the packaging of Java applications that are self-contained. Native packaging formats are supported by this tool to provide a natural installation experience to the end-users. Launch-time parameters can be specified during packaging which can be invoked directly via programming, command line, or the ToolProvider API. The jpackage module name changes to jdk.jpackage from jdk.incubator.jpackage.
3. New Language Features
- JEP 394 Pattern Matching for instanceof
Previously introduced in Java 14 and Java 15, Pattern Matching boosts the programming language by matching patterns of the instanceof operator. It allows for common logic in programs to be expressed precisely.
Previously introduced in Java 14 and Java 15, it provides a compact syntax to declare classes that act as transparent holders for empty immutable data. This reduces the verbosity of the classes and enhances code readability and maintenance.
4. Incubator and Preview Features
- JEP 338 Vector API (Incubator)
The incubator API is designed to facilitate an opening iteration of APIs to manifest vector computations. It reliably compiles on the supported CPU architectures during initial runtime by adhering to vector hardware instructions. This results in superior performance in comparison to scalar computations.
It leverages the SMID (Single Instruction Multiple Data) instructions available on the majority of modern CPUs. Even though auto-vectorization is supported by HotSpot, transformable scalar operations are restricted and susceptible to changes in the code. With this API, developers can easily write performant and portable vector algorithms in Java.
- JEP 389 Foreign Linker API (Incubator)
The Foreign Linker API facilitates ease of access to native code. It will greatly simplify the error-prone and difficult method of binding to a native library. Native method calls have been supported by Java through JNI(Java Native Interface) since Java 1.1 but it is difficult and fragile. Now, this API provides foreign-function support that does not require any intervention of the JNI glue code.
- JEP 393 Foreign Memory Access API (3rd Incubator)
This incubator API was previously introduced in Java 14 and Java 15. It enables Java programs to effectively operate on different types of foreign memory(such as managed heap memory, persistent memory, native memory, etc.) safely. It also lays the foundation of the Foreign Linker API.
- JEP 397 Sealed Classes (2nd Preview)
This preview function limits the number of other interfaces or classes that can implement or extend them. It enables the author of an interface/class to specify which code is in charge of implementing it. Additionally, it is a more declarative way of restricting the utilization of a superclass in comparison to access modifiers.
It also facilitates future directions related to pattern matching based on exhaustive pattern analysis.
5. Futureproof Your Work
- JEP 390 Warning for Value-Based Classes
This feature characterizes the fundamental wrapper classes as “value-based” and combines forRemoval to their constructors. As they are deprecated since JDK 9, new warnings are prompted.
Any improper attempt to sync with the instances of value-based classes is associated with a warning.
Popular open-source projects already respond to the Java 9 deprecation warnings and many more are expected to do so now with the increased urgency level of “deprecated for removal” warnings.
- JEP 396 Strong Encapsulation of JDK Internals
This feature encapsulates the internal JDK elements by default with the only exception of important internal APIs like sun.misc.Unsafe. Codes that have been compiled with the previous releases that access JDK internal APIs might no longer function by default. This change is aimed at encouraging developers to shift to utilizing standard APIs from utilizing internal elements. This migration will pave the way for easy upgrades to future Java releases.
6. Improvement In Productivity Of OpenJDK Developers
Note: These changes are minor ones and are not visible to the Java developers directly who utilize Java to code and execute applications. They can be perceived by the developers of Java who operate on OpenJDK.
- JEP 347- C++14 Language Features Are Enabled (in JDK source code)
This facilitates the utilization of C++14 language features in the source code of JDK C++. It also provides streamlined guidance on the specific features that can be utilized in the HotSpot code. The language features utilized by C++ code within the JDK have been restricted to the C++98/03 language specifications since JDK 15. It necessitates upgrading the platform compilers’ minimum acceptable version.
- JEP 357- Migration to Git from Mercurial, JEP 369- Migration to GitHub
For JDK 11 and later, these JEPs allow the migration of the OpenJDK Community’s source code repositories to Git from Mercurial (hg) while hosting them on GitHub.
*JEP 386- Alpine Linux Port, JEP 388- Windows/AArch64 Port
The emphasis of these JEPs is to integrate the completed ports into the JDK mainline repository. JDK is ported to Alpine Linux & additional distributions by JEP 386. Similarly, the JDK is ported to Windows by JEP 388.
In this space, we have discussed all the new introductions in the latest version of Java. The Java 16 updates have received a thumbs up from the developers. And, Oracle has already announced that the next version of Java(Java 17) will be released in September 2021 with exciting features like macOS Rendering Pipeline and improved Pseudo-Random Number Generators. Till then, adios amigos!
Contact Us for any Query
Email : firstname.lastname@example.org
Call : +91 8130704295
READ RELATED ARTICLES :
Here’s Why You Must Deploy Java Microservices on the Cloud