I wanted to install JDK 9 on my machine, visited JDK official download page, and was surprised to see,
Java SE 9 has reached end of support. Users of Java SE 9 should switch to Java SE 10. Please visit our Java SE Downloads page to get the current version of Java SE. You will be redirected to the Java SE Downloads page in ... seconds. Please update your bookmarks to the Java SE Downloads page.
I did some googling and Java release history etc. But couldn't find any concrete reason.
I have couple of questions-
- Oracle is still supporting the JDK 1.8, but stopped releasing updates to JDK 9, why?
- Should I continue using JDK 1.8 for some time and then directly switch to JDK 10?
Oracle transitioned to timeboxed releases. This means you will get a new Java release every 3 months, and a long term release every few years.
The Long Term Releases are expected to be supported for 3 years after the next release, so I wouldn't expect a new LTS release until some time late 2019 or early 2020, as December 2020 is the end of support for JDK 8.
In the past, Java major releases often tended to be loaded with far-reaching features that had a massive impact on the code that you could and should write, like generics (Java 5) and functional constructs (Java 8).
With Java 9 Oracle introduced a new modularization system (project Jigsaw), that also has a massive impact on the JVM architecture (although, not so much on the language syntax). They had to postpone the release of Java 9 two times because of disagreements on the implementation of that feature with other influential members of the Java community.
Presumably drawing a lesson from this, Oracle decided to overhaul the development style for Java to be more incremental or "agile", if you like. Instead of having feature loaded major releases that can sometimes take many years to finish, they want to publish major releases with less new features each in a fixed release schedule every six months.
Java 9 and Java 10 are the first two versions scheduled with this new release model and Java 9 already got deprecated with the release of Java 10. Java 11, which was released in September 2018 is a Long Term Support (LTS) release with support until 2026. This is very similar to what many are used to from the Ubuntu release model (On a side note, they even planned to replace the version numbers with something involving the year and month of release or so, similar to what Canonical is doing with Ubuntu, but dropped that idea for some reason).
Using a non-LTS version of Java now implies a commitment to update your software that uses the JDK every 6 month. It shouldn't be as involved as migrating code from one major Java version to another in the past because, as described, the language changes are supposed to happen in a more incremental way, but it's definitely something to consider. If you don't want to make this commitment, you should stick to the LTS versions, which means to stick with Java 8 or Java 11.
For a new "greenfield" project, Java 11 is most probably the best choice by now. But it might be necessary to stick with Java 8 if the toolchain to be used does not fully support Java 11 yet.
Apparently in the future Oracle wants to release a LTS version every three years or every 6th release, so the next LTS release to be expected after Java 11 is Java 17 in September 2021.