Follow OpenJDK on Twitter

2020 proved to be a memorable yr for Java as we celebrated its 25th birthday. With over 20 years of innovation, Java has continued to be:

  • Versatile by adapting to the altering know-how panorama whereas remaining platform impartial.
  • Dependable by retaining backwards compatibility.
  • Performant by accelerating innovation with out sacrificing safety.

Coupled with Java’s potential to spice up efficiency, stability and safety of the platform alongside the best way, it continues to be the world’s hottest programming language amongst builders. In keeping with IDC’s newest report “Java Turns 25”, over 9 million builders representing 69% of full-time builders worldwide use Java – greater than some other language.

Additional demonstrating Java’s path of continued innovation, Oracle is proud to announce the overall availability of Java 16 representing the seventh characteristic launch as a part of the six-month cadence.  This stage of predictability permits builders to extra simply handle their adoption of innovation due to a gentle stream of anticipated modifications.

Java 16 is now out there!

Oracle now presents Java 16 for all developers and enterprises.  Oracle JDK 16 will obtain a minimal of two quarterly updates, per the Oracle Critical Patch Update (CPU) schedule, earlier than being adopted by Oracle JDK 17. Java 17 will attain normal availability on September 2021, however early access builds are already being supplied at

As soon as once more, Oracle gives Java 16 because the Oracle OpenJDK release utilizing the open supply GNU Normal Public License v2, with the Classpath Exception (GPLv2+CPE), and likewise beneath a commercial license for these utilizing the Oracle JDK launch as a part of an Oracle services or products, or for many who need to have the ability to get business assist.

Java 16, Collectively

Just like earlier releases, we proceed to rejoice the contributions made to Java 16 from many people and organizations within the OpenJDK Group — all of us construct Java, collectively!

JDK 16 Repair Ratio

The general price of change over time within the JDK has remained primarily fixed for a few years, however beneath the six-month cadence the tempo at which production-ready improvements are delivered has vastly improved.

As an alternative of constructing tens of hundreds of fixes and round 100 JDK Enhancement Proposals (JEPs) out there in a big main launch each few years, enhancements are delivered in smaller Characteristic releases on a extra manageable, predictable six-month schedule. These modifications can vary from a major characteristic to small enhancements to routine upkeep, bug fixes, and documentation enhancements. Every change is represented in a single commit for a single problem within the JDK Bug System.

Of the 1,897 points marked as fastened in Java 16, 1,397 have been accomplished by individuals working for Oracle whereas 500 have been contributed by particular person builders and builders working for different organizations. Going via the problems and collating the group information from assignees leads to the next chart of organizations sponsoring the event of fixes in Java 16:

Oracle wish to thank the builders working for organizations like ARM, SAP, Purple Hat and Tencent for his or her notable contributions.  We’re additionally grateful to see contributions from smaller organizations similar to Ampere Computing, Bellsoft, DataDog, Microdoc and impartial builders who collectively contributed 3% of the fixes in Java 16.

We’re equally grateful to the the numerous skilled builders who reviewed proposed modifications, the early adopters who tried out early entry builds and reported points, and the devoted professionals who offered suggestions on the OpenJDK mailing lists. 

The next people offered invaluable suggestions on construct high quality, logged good high quality bugs or supplied frequent updates:

  • Jaikiran Pai (Apache Ant)
  • Gary Gregory (Apache Commons)
  • Uwe Schindler (Apache Lucene)
  • Robert Scholte (Apache Maven)
  • Mark Thomas (Apache Tomcat)
  • Enrico Olivelli (Apache Zookeeper)
  • Rafale Winterhalter (Byte Buddy)
  • Peter Karich (Graph Hopper)
  • Evgeny Mandikov (JaCoCo)
  • Marc Hoffman (JaCoCo)
  • Vincent Privat (JOSM)
  • Christain Stein (JUnit 5)
  • David Karnok (RxJava)

Moreover, via the Quality Outreach program we might wish to thank the next FOSS tasks and people who offered wonderful suggestions on testing Java 16 early entry builds to assist enhance the standard of the discharge.

  • Apache Ant 
  • Apache Derby (Wealthy Hillegas)
  • Apache Lucene
  • Apache Maven
  • Apache Tomcat
  • Apache Wicket (Martin Grigorov)
  • Apache ZooKeeper
  • Eclipse Collections (Nikhil Nanivadekar)
  • eo-yaml (Mihai Andronache)
  • FXGL (Almas Baimagambetov)
  • FXyz (Sean Phillips)
  • Java Katas (Chandra Guntur)
  • GraphHopper
  • Hibernate ORM
  • Hibernate Validator
  • Hibernate Search
  • Hibernate Reactive (Sanne Grinovero & Yoann Rodiere)
  • JobRunr (Ronald Dehuysser)
  • jOOQ (Lukas Eder)
  • MyBatis (Iwao Ave)
  • Micrometer (Tommy Ludwig)
  • RxJava
  • Sejda
  • PDFsam (Andrea Vacondio)

New in Java 16

Together with hundreds of efficiency, stability and safety updates, Java 16 presents customers seventeen main enhancements/changes (often known as JDK Enhancement Proposals – JEPs), together with three incubator modules and one preview characteristic.

Some enhancements are launched in Incubator modules, a method of placing non-final APIs and non-final instruments within the fingers of builders that enables customers to supply suggestions that may in the end enhance the standard of the Java platform.

Equally, some enhancements are launched as Preview features, language or VM options of the Java SE Platform which are totally specified, totally carried out, and but impermanent. They’re made out there in JDK characteristic releases to impress developer suggestions primarily based on real-world use, which can result in them turning into everlasting in a future launch.  This presents customers the prospect to supply well timed suggestions, in addition to permitting device distributors the chance to construct assist for the characteristic earlier than the majority of Java builders use it in manufacturing.

The 17 JEPs delivered with Java 16 have been grouped into six completely different classes:

1. New Language Options

JEP 394 Sample Matching for instanceof

First launched as a preview characteristic in Java 14 and once more in Java 15, Sample Matching enhances the Java programming language with sample matching for the instanceof operator.

Sample matching permits widespread logic in a program, particularly the conditional extraction of parts from objects, to be expressed extra concisely and safely.

JEP 395 Data

Additionally first launched as a preview characteristic in Java 14 and once more in Java 15, Data present a compact syntax for declaring courses that are clear holders for shallowly immutable information. This can considerably scale back the verbosity of those courses and enhance code readability and maintainability.

2. JVM Enhancements

JEP 376 ZGC Concurrent Thread Processing

JEP 376 transfer ZGC thread-stack processing from safepoints to a concurrent part, permits sub-millisecond pauses inside GC safepoints, even on giant heaps. Eradicating the ultimate supply of latency within the ZGC rubbish collector will significantly enhance efficiency and effectivity of purposes on this and subsquent releases.

JEP 387 Elastic Metaspace

This characteristic returns unused HotSpot VM class-metadata (i.e. metaspace) reminiscence to the working system extra promptly, lowering metaspace footprint. Functions with heavy class loading and unloading exercise can accrue lots of unused house. 

The brand new scheme allocates metaspace reminiscence in smaller chunks, reduces class-loader overhead and  fragmentation. It improves elasticity by returning unused metaspace reminiscence to the working system, which results in larger utility efficiency and reduces reminiscence utilization.

3. New Instruments and Libraries

JEP 380 Unix-Area Socket Channels

Unix-domain sockets have lengthy been a characteristic of most Unix platforms, and at the moment are supported in Home windows 10 and Home windows Server 2019. This characteristic provides Unix-domain (AF_UNIX) socket assist to the socket channel and server-socket channel APIs within the java.nio.channels bundle. It extends the inherited channel mechanism to assist Unix-domain socket channels and server socket channels. Unix-domain sockets are used for inter-process communication (IPC) on the identical host. They’re just like TCP/IP sockets in most respects, besides that they’re addressed by filesystem path names slightly than Web Protocol (IP) addresses and port numbers. For native, inter-process communication, Unix-domain sockets are each safer and extra environment friendly than TCP/IP loopback connections.

JEP 392 Packaging Device

This characteristic was first launched as an incubator module in Java 14. This device permits for packaging self-contained Java purposes. It helps native packaging codecs to provide finish customers a pure set up expertise. These codecs embrace msi and exe on Home windows, pkg and dmg on macOS, and deb and rpm on Linux. It additionally permits launch-time parameters to be specified at packaging time and will be invoked straight, from the command line, or programmatically, through the ToolProvider API. Be aware that the title of the jpackage module modifications from jdk.incubator.jpackage to jdk.jpackage. This can enhance the end-user expertise when putting in purposes and simplify deployments utilizing the “app store” mannequin.

4. Futureproofing Your Work

JEP 390 Warning for Worth-Primarily based Lessons

This characteristic designates the primitive wrapper courses (java.lang.Integer, java.lang.Double, and so on) as value-based (just like java.util.Optionally available and java.time.LocalDateTime) and add forRemoval to their constructors, that are deprecated since JDK 9, prompting new warnings.  It gives warnings about improper makes an attempt to synchronize on cases of any value-based courses within the Java Platform.

Many standard open-source tasks have already responded to the deprecation warnings of Java 9 by eradicating wrapper constructor calls from their sources, and we are able to anticipate many extra to take action, given the heightened urgency of “deprecated for elimination” warnings.

JEP 396 Strongly Encapsulate JDK Internals by default

This characteristic strongly encapsulates all inside parts of the JDK by default, aside from important inside APIs similar to solar.misc.Unsafe. Code efficiently compiled with earlier releases that accesses inside APIs of the JDK could not work by default. This transformation goals to encourage builders emigrate from utilizing inside parts to utilizing customary APIs, in order that each they and their customers can improve with out fuss to future Java releases. Robust encapsulation is managed by the launcher possibility -–illegal-access, for JDK 9 till JDK 15 defaults to warning, and beginning with JDK 16 defaults to deny. It’s nonetheless attainable (for now) to calm down encapsulation of all packages with a single command-line possibility, sooner or later solely opening particular packages with –add-opens will work.

5. Incubator and Preview Options

JEP 338 Vector API (Incubator)

This incubator API gives an preliminary iteration of an API to specific vector computations that reliably compile at runtime to optimum vector {hardware} directions on supported CPU architectures and thus obtain superior efficiency to equal scalar computations. It permits benefiting from the Single Instruction A number of Information (SIMD) directions out there on most trendy CPUs. Though HotSpot helps auto-vectorization, the set of transformable scalar operations is proscribed and fragile to modifications within the code. This API will enable builders to simply write moveable and performant vector algorithms in Java.

JEP 389 International Linker API (Incubator)

This incubator API presents statically-typed, pure-Java entry to native code. This API will significantly simplify the in any other case convoluted and error-prone technique of binding to a local library. Java has supported native technique calls through the Java Native Interface (JNI) since Java 1.1 however it’s exhausting and brittle. Java builders ought to be capable of (principally) simply use any native library that’s deemed helpful for a selected process. It additionally  gives foreign-function assist with out the necessity for any intervening JNI glue code.

JEP 393 International Reminiscence Entry API (3rd Incubator)

First launched as an incubator API in Java 14 and once more in Java 15, this API permits Java applications to soundly and effectively function on numerous sorts of international reminiscence (e.g., native reminiscence, persistent reminiscence, managed heap reminiscence, and so on.). It additionally gives the muse for the International Linker API.

JEP 397 Sealed Lessons (2nd Preview)

This preview characteristic restricts which different courses or interfaces could lengthen or implement them. It permits the writer of a category or interface to manage which code is answerable for implementing it. Additionally, It gives a extra declarative method than entry modifiers to limit the usage of a superclass. And it helps future instructions in sample matching by underpinning the exhaustive evaluation of patterns.

6. Bettering Productiveness for OpenJDK Builders

The remainder of the modifications are usually not straight seen to Java builders (those who use Java to code and run purposes), slightly solely to builders of Java (those who work on OpenJDK).

JEP 347 Allow C++14 Language Options (in JDK supply code)

This permits the usage of C++14 language options in JDK C++ supply code and provides particular steerage about which of these options could also be utilized in HotSpot code. By way of JDK 15, the language options utilized by C++ code within the JDK have been restricted to the C++98/03 language requirements. It requires updating the minimal acceptable model of varied platform compilers.

JEP 357 Migrate from Mercurial to Git
JEP 369 Migrate to GitHub

These JEPs migrate the OpenJDK Group’s supply code repositories from Mercurial (hg) to Git and host them on GitHub for JDK 11 and later. The migration consists of updating tooling similar to  jcheck, webrev, and defpath instruments to Git. Git reduces the scale of the metadata (round ¼ of the scale) preserving native disk house and lowering clone time. Fashionable tooling is healthier built-in with Git than Mercurial. OpenJDK Git repositories at the moment are at

JEP 386 Alpine Linux Port

JEP 388 Home windows/AArch64 Port

The main focus of those JEPs is just not the porting effort itself, which was already finished, however integrating them into the JDK main-line repository.

JEP 386 ports the JDK to Alpine Linux and different distributions that use musl as their major C Library on each x64 and AArch64. As well as, JEP 388 ports the JDK to Home windows AArch 64 (ARM64).

Tooling Assist

Present tooling assist helps drive developer productiveness.  With Java 16, we proceed to welcome the efforts of main IDE distributors whose tooling options supply builders assist for present Java variations.  Builders can anticipate to obtain Java 16 assist with the next IDEs:

Java continues to be the #1 programming language of alternative by software program programmers.  Because the on-time supply of enhancements with Java 16 demonstrates, via continued considerate planning and ecosystem involvement, the Java platform is well-positioned for contemporary growth and progress within the cloud.

Proceed staying present with information and updates by:

  • Visiting Inside.Java (information and views by the Java Workforce at Oracle)
  • Listening to the Inside.Java podcasts (a present for Java Builders dropped at you straight from the people who make Java at Oracle. We’ll focus on the language, the JVM, OpenJDK, platform safety, innovation tasks like Loom and Panama, and all the things in between).
  • Becoming a member of the OpenJDK mailing lists (the place to study concerning the progress of your favourite OpenJDK tasks).

Leave a Reply

Your email address will not be published. Required fields are marked *