Skip to content
All posts

Which JDK Distribution Should You Use in 2026?

By 15 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

DistributionCostJava 25 free updates untilBest for
Amazon CorrettoFreeOct 2032long, published free updates, and workloads on AWS
Azul ZuluFree; paid support availableNot publishedunusual platforms, CRaC, and paid support that includes legacy Java
BellSoft Liberica JDKFree; published support pricesNot publishedSpring Boot container images, and desktop apps with JavaFX
Eclipse TemurinFreeAt least Sep 2031a vendor-neutral default for most teams
IBM Semeru RuntimesFreeSep 2031a small memory footprint with the OpenJ9 JVM
Microsoft Build of OpenJDKFreeAt least Sep 2030Azure workloads and Windows on ARM
Oracle JDKFree for a limited timeSep 2028teams with a Java SE subscription, or trying the latest release
Oracle OpenJDK buildsFreeJan 2026trying the newest Java release, not long-lived production
Red Hat build of OpenJDKWith a Red Hat subscriptionWith subscriptionRHEL and OpenShift environments with a Red Hat subscription
SapMachineFreeSep 2030SAP environments
Timeline of free updates for Java 25 by distribution: Corretto until October 2032, Temurin and Semeru until September 2031, Microsoft and SapMachine until September 2030, Oracle JDK under NFTC until September 2028, and Oracle OpenJDK builds until January 2026
Free updates for Java 25, as each vendor publishes them in October 2026.

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:

build.gradle
tasks.named("bootBuildImage") {
    buildpacks = ["paketo-buildpacks/adoptium", "urn:cnb:builder:paketo-buildpacks/java"]
}
pom.xml
<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:

Dockerfile
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:

Terminal
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
SuffixDistribution
-temEclipse Temurin
-amznAmazon Corretto
-zuluAzul Zulu
-librcaBellSoft Liberica
-msMicrosoft Build of OpenJDK
-semIBM Semeru
-sapmchnSapMachine
-oracleOracle JDK
-openOracle OpenJDK builds
-graalce, -graalGraalVM 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.