Which JDK Distribution Should You Use in 2026?
By Uddip Acharjee Shuvo15 min read
Every JDK in this guide is built from the same OpenJDK source code, and the certified ones run your application the same way. So why are there so many, and does the choice matter? It does, but not for the reasons people expect. What differs is how long each vendor keeps shipping free security updates, the licence you run under in production, the platforms and container images on offer, and who you can call when something breaks.
This guide compares ten JDK distributions on exactly those points, then covers GraalVM and what the choice means for a Spring Boot project. Support dates, licences and images come from each vendor’s own pages, checked in October 2026.
What actually differs between JDKs
- How long updates stay free. Each vendor decides how long it patches each long-term support (LTS) release. For Java 25 the published dates range from early 2026 to late 2032.
- The production licence. Most builds use the GPLv2 with the Classpath Exception and are free forever. Oracle JDK is free only for a limited time per release.
- Certification. Builds that pass the Java Technology Compatibility Kit (TCK, or JCK) are certified as compatible with the Java SE specification.
- Platforms. Alpine (musl), Windows on ARM, RISC-V, s390x and AIX are where distributions differ most.
- Container images. Official, maintained images and their base operating systems.
- Paid support. Whether you can buy it, and whether the price is published.
- Extras. JavaFX, CRaC for fast startup, the OpenJ9 JVM, or native images.
Which Java version?
The LTS releases are Java 8, 11, 17, 21 and 25. Java 27, released in September 2026, is a feature release that only gets about six months of updates, and the next LTS is planned to be Java 29 in September 2027. For a new project, choose Java 25. Spring Boot 3.x and 4.x both need Java 17 or later.
Quick comparison
| Distribution | Cost | Java 25 free updates until | Best for |
|---|---|---|---|
| Amazon Corretto | Free | Oct 2032 | long, published free updates, and workloads on AWS |
| Azul Zulu | Free; paid support available | Not published | unusual platforms, CRaC, and paid support that includes legacy Java |
| BellSoft Liberica JDK | Free; published support prices | Not published | Spring Boot container images, and desktop apps with JavaFX |
| Eclipse Temurin | Free | At least Sep 2031 | a vendor-neutral default for most teams |
| IBM Semeru Runtimes | Free | Sep 2031 | a small memory footprint with the OpenJ9 JVM |
| Microsoft Build of OpenJDK | Free | At least Sep 2030 | Azure workloads and Windows on ARM |
| Oracle JDK | Free for a limited time | Sep 2028 | teams with a Java SE subscription, or trying the latest release |
| Oracle OpenJDK builds | Free | Jan 2026 | trying the newest Java release, not long-lived production |
| Red Hat build of OpenJDK | With a Red Hat subscription | With subscription | RHEL and OpenShift environments with a Red Hat subscription |
| SapMachine | Free | Sep 2030 | SAP environments |
Which one should you choose?
- No special requirements: Eclipse Temurin. It is vendor-neutral, free, and the default almost everywhere.
- Long free updates with a published date: Amazon Corretto, with Java 25 patched until October 2032.
- Running on AWS: Amazon Corretto. On Azure: Microsoft Build of OpenJDK.
- RHEL or OpenShift with a Red Hat subscription: Red Hat build of OpenJDK.
- Spring Boot images built with buildpacks: BellSoft Liberica, which they already use.
- Windows on ARM: Microsoft Build of OpenJDK, Azul Zulu or Liberica.
- Low memory use in dense container deployments: IBM Semeru, with OpenJ9.
- Paid support including Java 6 or 7: Azul.
- Inside SAP: SapMachine.
- Oracle JDK: only if you have a Java SE subscription, or you are on the newest releases and will move on before the free period ends.
The distributions, A to Z
Amazon Corretto
Best for long, published free updates, and workloads on AWS
- Price
- Free, including production; support through existing AWS Support plans
- Platforms
- Linux (including Alpine), Windows x64, macOS
- Java versions
- 8, 11, 17, 21, 25, 27
- Free updates
- 21 until Oct 2030; 25 until Oct 2032
- Container image
- amazoncorretto (Docker Hub, also on Amazon ECR Public)
- License
- GPLv2 with Classpath Exception, TCK-certified
- First released
- 2019
- Website
- aws.amazon.com
Amazon’s OpenJDK build, which it runs on thousands of its own production services. It publishes some of the longest free update commitments of any vendor, and sometimes ships fixes before they reach the matching OpenJDK update release.
Key features
- Patches not yet merged into the corresponding OpenJDK update release
- Planned out-of-cycle releases for urgent fixes
- Linux packages as .deb, .rpm and tar archives, plus Alpine builds
- Official Docker Hub images on Amazon Linux 2, Amazon Linux 2023 and Alpine
Strengths
- Free updates for Java 25 until October 2032, with a published date
- No paid features or usage restrictions
- A natural fit on AWS
Limitations
- No Windows on ARM build
- The amazoncorretto:latest image is Java 8, so always pin a version
- JavaFX was removed from Corretto 8 in 2026
Azul Zulu
Best for unusual platforms, CRaC, and paid support that includes legacy Java
- Price
- Free builds; paid Azul Platform Core support, priced per vCore or desktop
- Platforms
- Linux (including musl), Windows x64 and ARM64, macOS, plus legacy platforms
- Java versions
- 8, 11, 17, 21, 25, 27 (6 and 7 for customers)
- Free updates
- No end date published for the free builds; paid support for 25 until Sep 2033
- Container image
- azul/zulu-openjdk (Ubuntu, Alpine, Debian variants)
- License
- GPLv2 with Classpath Exception, TCK-tested
- First released
- 2013
- Website
- azul.com
Azul builds OpenJDK for the widest range of platforms of any vendor, from Windows on ARM to Solaris and 32-bit systems. The free builds come with no support obligation; Azul Platform Core adds out-of-cycle fixes, security-only updates and support.
Key features
- Free CRaC builds (Java 17 and later) for starting from a saved checkpoint, fully supported on Linux
- JavaFX bundles
- musl builds for Alpine on x64 and ARM64
- Windows on ARM builds from Java 17
- Paid support also covers Java 6 and 7, and Temurin builds
Strengths
- Broadest platform coverage
- CRaC without building your own JDK
- One vendor for modern and legacy Java
Limitations
- No published end date for free updates
- Free builds come with no support obligation
- Support prices only through sales
BellSoft Liberica JDK
Best for Spring Boot container images, and desktop apps with JavaFX
- Price
- Free, including production; Liberica JDK Enterprise support from $15,000 a year for up to 50 servers
- Platforms
- Linux (including musl), Windows x64 and ARM64, macOS; also RISC-V and PowerPC
- Java versions
- 8, 11, 17, 21, 25, 27
- Free updates
- No separate end date published; updates and support for 25 announced until Sep 2033
- Container image
- bellsoft/liberica-runtime-container, bellsoft/liberica-openjre-debian
- License
- Free for production; TCK-verified
- First released
- 2017
- Website
- bell-sw.com
The JDK that Spring Boot’s default buildpacks install, and the one in Spring Boot’s own Dockerfile examples. It comes in Lite, Standard and Full flavours, the last including JavaFX.
Key features
- Default JVM in the Paketo buildpacks behind Spring Boot’s bootBuildImage
- Full flavour with JavaFX (LibericaFX)
- CRaC builds for Java 17 and 21
- Runtime containers on Alpaquita Linux, with glibc or musl
- Liberica Native Image Kit, a GraalVM-based native image builder
Strengths
- Already in your images if you build them with Spring Boot’s buildpacks
- Publishes its support prices
- Wide platform list, including RISC-V
Limitations
- No separate published end date for free updates
- No CRaC builds for Java 25 or 27 yet
Eclipse Temurin
Best for a vendor-neutral default for most teams
- Price
- Free, including production; commercial support from third parties
- Platforms
- Linux (including Alpine, s390x and RISC-V), Windows x64, macOS; AIX
- Java versions
- 8, 11, 17, 21, 25, 27
- Free updates
- 21 until at least Dec 2029; 25 until at least Sep 2031
- Container image
- eclipse-temurin (official Docker Hub image)
- License
- GPLv2 with Classpath Exception, JCK-tested
- First released
- 2021 (as AdoptOpenJDK from 2017)
- Website
- adoptium.net
Built by the Eclipse Adoptium working group, which several large vendors back together. It is SDKMAN!’s default Java, and every release must pass both the Java compatibility kit and Adoptium’s own AQAvit quality suite.
Key features
- Passes the JCK and the AQAvit quality suite
- Official Docker Hub image on Ubuntu, Alpine, UBI and Windows Server
- Linux builds for x64, ARM64, ppc64le, s390x and RISC-V
- The default JDK in SDKMAN!
Strengths
- Vendor-neutral, under the Eclipse Foundation
- A safe default for most projects
- Commercial support available from IBM, Red Hat, Azul and others
Limitations
- Only community support from Adoptium itself
- No Windows on ARM build for Java 25
IBM Semeru Runtimes
Best for a small memory footprint with the OpenJ9 JVM
- Price
- Free, including production; paid support through IBM Runtimes for Business
- Platforms
- Linux (x64, ARM64, ppc64le, s390x), Windows x64, macOS; AIX and z/OS
- Java versions
- 8, 11, 17, 21, 25, 27
- Free updates
- 21 until Dec 2029; 25 until Sep 2031
- Container image
- ibm-semeru-runtimes (Docker Hub, Open Edition)
- License
- Open Edition: GPLv2 with Classpath Exception, not TCK-tested; Certified Edition: IBM licence, certified
- First released
- 2021
- Website
- developer.ibm.com
IBM’s distribution pairs the OpenJDK class libraries with the Eclipse OpenJ9 JVM instead of HotSpot. OpenJ9 is designed for fast startup and a small memory footprint, which can matter when you pack many containers onto a host.
Key features
- Eclipse OpenJ9 JVM instead of HotSpot
- Shared class cache and ahead-of-time compilation for faster startup
- Open Edition, and a TCK-certified Certified Edition
- Images on Docker Hub and in IBM’s registry, including UBI-based ones
Strengths
- Designed for lower memory use and faster startup
- Covers IBM hardware: s390x, AIX and z/OS
- Free for commercial use
Limitations
- A different JVM: some HotSpot flags, diagnostics and GC tuning don’t carry over
- The Open Edition is not TCK-tested
- No Alpine builds
Microsoft Build of OpenJDK
Best for Azure workloads and Windows on ARM
- Price
- Free; support for Azure customers with an Azure support plan
- Platforms
- Linux, Windows and macOS, on both x64 and ARM64
- Java versions
- 11, 17, 21, 25 (Java 8 images use Temurin)
- Free updates
- 21 until at least Sep 2028; 25 until at least Sep 2030
- Container image
- mcr.microsoft.com/openjdk/jdk (Ubuntu, Azure Linux, distroless)
- License
- GPLv2 with Classpath Exception, TCK-tested
- First released
- 2021
- Website
- learn.microsoft.com
Microsoft’s LTS-only build, made with Adoptium’s build scripts and quality suite and used across Azure. It is one of the few distributions with Windows on ARM builds for every version it supports.
Key features
- Windows, Linux and macOS on both x64 and ARM64
- Distroless container images based on Azure Linux
- Built and tested with Adoptium’s tooling
- Backported fixes, called out in the release notes
Strengths
- Windows on ARM for every supported version
- Distroless images out of the box
- A good default on Azure
Limitations
- No Java 8 build of its own and no non-LTS releases
- No Alpine images
- Commercial support only for Azure customers
Oracle JDK
Best for teams with a Java SE subscription, or trying the latest release
- Price
- Free under NFTC for a limited time per release; Java SE Universal Subscription priced per employee
- Platforms
- Linux x64 and ARM64, Windows x64, macOS ARM64 (macOS x64 up to Java 25)
- Java versions
- 8, 11, 17, 21, 25, 27
- Free updates
- 25 under NFTC until Sep 2028; 21’s free updates ended in Sep 2026
- Container image
- container-registry.oracle.com/java/jdk
- License
- NFTC (free) for 25 and 27; OTN (not free in production) for 8, 11, 17, and 21 from 21.0.13
- First released
- 1996, as Sun’s JDK
- Website
- oracle.com
The JDK from Java’s steward. Recent releases are free under the No-Fee Terms and Conditions licence, but only until a year after the next LTS. Later updates move to the OTN licence, which needs a paid subscription for production use.
Key features
- Installers (MSI, RPM, DEB) as well as archives
- Premier and Extended Support timelines with a subscription
- The subscription includes Java Management Service and the Enterprise Performance Pack
- Usage Logging to see where Java runs
Strengths
- Direct from Oracle, with the longest paid support timelines
- Free for the newest releases
- Installers on every platform it supports
Limitations
- Free production use ends a year after the next LTS; for Java 21 that was September 2026
- The subscription is priced per employee, not per server
- No Alpine or Windows on ARM builds
Oracle OpenJDK builds
Best for trying the newest Java release, not long-lived production
- Price
- Free
- Platforms
- Linux x64 and ARM64, Windows x64, macOS ARM64
- Java versions
- The current release only (27)
- Free updates
- About six months per release: 25 was updated until Jan 2026
- Container image
- container-registry.oracle.com/java/openjdk (Docker Hub’s openjdk is deprecated)
- License
- GPLv2 with Classpath Exception
- First released
- 2017
- Website
- jdk.java.net
Oracle’s reference builds of OpenJDK under the open-source licence. Each release only gets updates until the next one ships, about six months later, so they suit trying new features rather than running long-lived production systems.
Key features
- Reference OpenJDK builds from Oracle
- Early-access builds of the next release, and of projects such as Loom, Valhalla and Leyden
- Plain archives, no installers
Strengths
- New features first
- Open-source licence
Limitations
- No long-term updates, even for LTS versions
- Archives only
- The openjdk image on Docker Hub is deprecated and only gets early-access builds
Red Hat build of OpenJDK
Best for RHEL and OpenShift environments with a Red Hat subscription
- Price
- No-cost download with a free Red Hat Developer account; production support with RHEL, OpenShift or Middleware subscriptions
- Platforms
- RHEL (x86_64, aarch64, ppc64le, s390x), Windows, portable Linux builds
- Java versions
- 8, 11 (extended support), 17, 21, 25
- Support
- 21 until Dec 2029; 25 until Dec 2030, with paid extended support beyond
- Container image
- registry.access.redhat.com/ubi9/openjdk-21, ubi9/openjdk-25 and -runtime variants
- License
- GPLv2 with Classpath Exception
- First released
- Packaged in RHEL since OpenJDK 6
- Website
- developers.redhat.com
Red Hat packages OpenJDK into RHEL and its UBI container images and supports it under Red Hat subscriptions. It follows the operating system’s crypto policies and FIPS mode, which matters in regulated environments.
Key features
- RHEL packages and UBI base images
- Follows system-wide crypto policies and FIPS mode
- Shenandoah garbage collector
- Fixes backported from newer OpenJDK versions
Strengths
- Supported together with the rest of the RHEL stack
- UBI images for OpenShift and Kubernetes
- Red Hat supports Temurin as well
Limitations
- Downloads need a free Red Hat Developer account
- Production support needs a subscription
- LTS only, no Alpine builds, and no SDKMAN! listing
SapMachine
Best for SAP environments
- Price
- Free, including production; support for SAP customers inside SAP products
- Platforms
- Linux (x64, ARM64, ppc64le), Alpine x64, Windows x64, macOS ARM64; AIX
- Java versions
- 21, 25, 27 (17 reached end of life in Sep 2026)
- Free updates
- 21 until Sep 2028; 25 until Sep 2030
- Container image
- ghcr.io/sap/sapmachine (Garden Linux) for production
- License
- GPLv2 with Classpath Exception; LTS releases pass the JCK
- First released
- 2018
- Website
- sapmachine.io
SAP’s OpenJDK build and the default Java runtime across SAP’s own applications and services. SAP contributed features such as helpful NullPointerExceptions and elastic Metaspace to OpenJDK itself.
Key features
- Default runtime across SAP products
- Production container images on Garden Linux
- AIX and Linux ppc64le support
- LTS releases pass the JCK
Strengths
- Free for the whole maintenance period
- Backed by SAP’s own OpenJDK engineering
Limitations
- Shorter LTS windows: Java 17 already reached end of life
- No Java 8
- Its Docker Hub images are not meant for production
What about GraalVM?
GraalVM used to be pitched as a faster, drop-in JDK. That changed in 2025. GraalVM for JDK 24 was the last version licensed and supported as part of Oracle’s Java SE products, and the optional Graal JIT compiler was removed from Oracle JDK 25.
GraalVM itself continues in two editions, both including Native Image. Oracle GraalVM is free under the GraalVM Free Terms and Conditions, except its 17.0.13 and 21.0.13 updates and later, which moved to an OTN licence. GraalVM Community Edition is GPLv2 with the Classpath Exception. Since 25.1, both ship a new feature release every month rather than every six months.
Reach for GraalVM when you want a native executable with fast startup and low memory, for example for a CLI tool or a scale-to-zero service. BellSoft’s Liberica Native Image Kit and Red Hat’s Mandrel are downstream builds of GraalVM CE aimed at exactly that. For everything else, use one of the regular JDKs above.
Choosing a JDK for Spring Boot
Spring Boot does not recommend a vendor; its only requirement is Java 17 or later. Spring Boot 3.5 supports up to Java 25, and Spring Boot 4.x up to Java 27. Any certified build runs your application the same way, so the decision mostly comes down to how you build and deploy.
Container images from bootBuildImage
./gradlew bootBuildImage and mvn spring-boot:build-image use Paketo buildpacks, which install BellSoft Liberica by default. Spring Boot passes your project’s Java version to the buildpacks, so a project compiled for Java 25 gets a Java 25 runtime. To use another vendor, list its buildpack before the Java buildpack:
tasks.named("bootBuildImage") {
buildpacks = ["paketo-buildpacks/adoptium", "urn:cnb:builder:paketo-buildpacks/java"]
}<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<image>
<buildpacks>
<buildpack>paketo-buildpacks/adoptium</buildpack>
<buildpack>urn:cnb:builder:paketo-buildpacks/java</buildpack>
</buildpacks>
</image>
</configuration>
</plugin>Paketo also has buildpacks for Amazon Corretto, Azul Zulu, Eclipse OpenJ9, GraalVM, Microsoft OpenJDK, Oracle JDK and SapMachine. Setting buildpacks replaces the builder’s default list, which is why the Java buildpack has to be listed too.
Writing your own Dockerfile
Use a runtime image and pin the major version in the tag:
FROM eclipse-temurin:25-jre
COPY build/libs/app.jar /app/app.jar
ENTRYPOINT ["java", "-jar", "/app/app.jar"]Switching JDKs locally with SDKMAN!
SDKMAN! installs and switches between distributions per shell or per project. Each identifier ends with a vendor suffix; run sdk list java for the current versions, then install one:
sdk list java
sdk install java 25.0.5.0+8-tem # Temurin, SDKMAN!'s default
sdk env init # pin the JDK for this project in .sdkmanrc| Suffix | Distribution |
|---|---|
-tem | Eclipse Temurin |
-amzn | Amazon Corretto |
-zulu | Azul Zulu |
-librca | BellSoft Liberica |
-ms | Microsoft Build of OpenJDK |
-sem | IBM Semeru |
-sapmchn | SapMachine |
-oracle | Oracle JDK |
-open | Oracle OpenJDK builds |
-graalce, -graal | GraalVM CE, Oracle GraalVM |
Red Hat’s build is not listed in SDKMAN!; Red Hat’s GraalVM build, Mandrel, is (-mandrel).
Frequently asked questions
Is OpenJDK free for commercial use?
Yes. Builds released under the GPLv2 with the Classpath Exception, such as Eclipse Temurin, Amazon Corretto, Azul Zulu, Microsoft Build of OpenJDK, SapMachine and IBM Semeru's Open Edition, are free to use in production. BellSoft Liberica is also free for production. Oracle JDK is the exception: it is free under its NFTC licence only for a limited period per release.
Is Oracle JDK free?
Partly. As of October 2026, Oracle JDK 25 and 27 are free for production under the No-Fee Terms and Conditions licence; for Java 25 that lasts until September 2028. Oracle JDK 21 updates from 21.0.13 (October 2026), 17 updates from 17.0.13, and all 8 and 11 updates are under the OTN licence, which needs a paid Java SE subscription for production use.
What is the difference between OpenJDK and Oracle JDK?
Both are built from the OpenJDK source code. The differences are the licence, how long free updates last, packaging such as installers, and commercial support. For running applications, a TCK-certified OpenJDK build behaves the same as Oracle JDK.
Which JDK should I use with Spring Boot?
Any TCK-certified build works; Spring Boot does not recommend a vendor. Spring Boot 3.x and 4.x need Java 17 or later; Boot 3.5 supports up to Java 25 and Boot 4.x up to Java 27. If you build images with bootBuildImage, the default Paketo buildpacks install BellSoft Liberica, and you can switch to another vendor's buildpack.
Which Java version should a new project use?
Java 25, the newest LTS release, released in September 2025. Java 27 is a feature release that only gets about six months of updates, and the next LTS, Java 29, is planned for September 2027.
Which JDK image should I use in Docker?
Use an actively maintained image and pin the Java version in the tag, for example eclipse-temurin:25-jre, amazoncorretto:25 or mcr.microsoft.com/openjdk/jdk:25-ubuntu. Avoid the deprecated openjdk image on Docker Hub, and don't rely on amazoncorretto:latest, which is Java 8.
Is GraalVM a drop-in replacement for my JDK?
Not anymore in the way it once was. Oracle detached GraalVM from its Java SE products after GraalVM for JDK 24, and GraalVM now ships monthly feature releases focused on Native Image and other languages. Use it, or a downstream build such as Liberica Native Image Kit or Mandrel, when you want native executables; use a regular JDK otherwise.
How this comparison was put together
Support dates, licences, platforms, container images and prices come from each vendor’s own website, lifecycle pages, licence pages and container registries, checked in October 2026. Vendors revise these dates, so check the vendor’s page before committing to one for years. If something here is out of date, tell me on GitHub.