Happy New Year, everyone!
For the last few years, I’ve written a blog post at the start of each year with my predictions for what will happen in the following twelve months focused on Java. Now that we have settled into the safe, predictable six-month release cadence for Java SE, this seems a bit redundant.
For this year, we will see the release of JDK 16 and JDK 17. In the case of JDK 16, we are already in ramp-down phase 1, meaning the new features are fixed. It would seem ridiculous to use the list of JEPs on the project web page to predict what it will include. We already know that the most prominent new features will be:
- A new Vector API incubator module that will enable better use of instructions like AVX to improve performance. I will just say that the Falcon compiler, included in the Zing JVM, is very good at doing this without programmatic involvement.
- Inclusion of the Foreign Linker API as an incubator module. This is part of Project Panama, providing a replacement for JNI.
- Moving the Packaging Tool, Records and Pattern Matching for Instanceof to standard features rather than incubator/preview.
- Strongly encapsulate JDK internals by default. This is effectively a change of the
--illegal_access
flag value from permit to deny. This does not, however, change accessibility for critical internal APIs like sun.misc.Unsafe.
I will cover all these in detail, as well as other changes, next month when JDK 16 is released.
Obviously, for JDK 17, we don’t know what features will be included. I hope that we will see Project Loom added as an incubator/preview feature. This is an exciting new feature that will add light-weight user-mode threads to Java and the JVM. This will map multiple Java threads to a single operating system thread with the JVM taking responsibility for scheduling and context switching. The main benefit of this is allowing you to do more with the resources you already have.
JDK 17 is significant for another reason as, for all mainstream binary distributions, it will be the next Long-Term Support (LTS) release. Enterprise users, looking for stability in their deployments, will start to make the migration from JDK 11 to JDK 17. I don’t see anything significant that will make this migration either complex or time-consuming. Mostly, it will just be running a full set of tests on applications.
One other thing of interest for the core Java platform will be the final demise of Applets. Applets were deprecated in the Oracle JDK 9 and removed from the Oracle JDK 11. Since they were a commercial feature and not part of OpenJDK, this was the only JDK distribution that included support for them. Oracle discontinued commercial support (and therefore updates) to the browser plugin in March 2019. Some people have continued to use Applets, but it has become increasingly difficult; only Microsoft’s Internet Explorer (IE) 11 still includes functionality that enables Applets to run. From August 17th, Microsoft will officially end support of IE 11. Anyone still using Applets after that is putting themselves in a particularly precarious position regarding security vulnerabilities.
Another area that may change this year is the Java Community Process (JCP). There are now only seven active JSRs outside of those for Java SE, and only one of those seems to have any real activity. It may be time to find a different way to handle the Java SE standards work and intellectual property management.
I, therefore, believe we will have another year of Java continuing to deliver on new features for developers, using a process of evolution rather than revolution. Although Java dropped in popularity last year to third place (by some metrics), I think it will continue to be in first, second or third place for a very long time. What do you think?