Choosing a JDK in 2026: an honest guide
A vendor-by-vendor comparison of OpenJDK distributions, with platform-specific guidance and an explicit view on where each one wins.
This guide is written by the team behind Eliya JDK. We make no effort to hide that we ship our own distribution, but this guide is written to help you pick the right JDK for your situation, which is often not Eliya.
TL;DR
- Most people, most workloads: Eclipse Temurin. It's the SDKman default for good reason.
- Running on AWS: Amazon Corretto.
- Spring Boot with Paketo Buildpacks: BellSoft Liberica; it's already the default.
- Need a commercial support contract: Azul Zulu, BellSoft Liberica, or your cloud vendor's build.
- Running on Azure: Microsoft Build of OpenJDK.
- Running on OpenShift / RHEL: Red Hat OpenJDK.
- SAP ecosystem: SapMachine.
- Java GUI / desktop app with JavaFX bundled: Liberica Full JDK.
- Need native image / AOT compilation: GraalVM (Oracle or Community) or Liberica NIK.
- Just want to run Minecraft / IntelliJ / Android Studio: the bundled runtime. Don't overthink it.
- Building Quarkus native images: Red Hat Mandrel, the community default for Quarkus native builds.
- Compliance-conscious production needing forensic-grade JVM diagnostics (BFSI, healthcare, government, regulated industries): worth evaluating Eliya JDK for the bundled
-XX:EliyaProfile=Productionobservability profile and (Phase 3+) Asymm Forensics platform. - Whatever you pick, pick LTS. In 2026 that's JDK 21 or JDK 25.
The choice matters less than it feels
All major OpenJDK distributions (Temurin, Corretto, Zulu, Liberica, Microsoft Build, Red Hat OpenJDK, SapMachine, Eliya) build from the same upstream source and pass the same Technology Compatibility Kit. Swapping between them is an operational task, not an application-code task. If your app runs on one, it runs on all of them.
The real differences are:
- How long each vendor promises to patch each LTS
- What licence they ship under (almost all are GPLv2+CE; Oracle JDK is the exception)
- Which platforms and architectures they publish binaries for
- Whether commercial support is available, and from whom
- Whether the vendor bundles extras (JavaFX, native image kit, crypto provider, tuned defaults)
- How aligned the vendor is with your existing infrastructure (AWS / Azure / RHEL / SAP / etc.)
Tom Gregory summed it up well: "don't spend too long deliberating over which JDK vendor to go with."
Decision dimensions
| Dimension | What to check | Why it matters |
|---|---|---|
| Support lifecycle | How long is the LTS patched for? | You'll live with this LTS for 3–5 years. A vendor who drops support early forces a migration. |
| Licence | GPLv2+CE vs. Oracle NFTC vs. commercial | Oracle JDK 17+ under the No-Fee Terms and Conditions is free for production but has narrower patch windows; other vendors ship GPLv2+CE. |
| TCK verification | Has the vendor run the compatibility kit? | TCK verification is the only meaningful "this is really Java" proof. All major vendors pass. |
| Vendor neutrality | Single company vs. foundation-backed | A single-vendor dependency is a real risk for long-lived systems. Temurin (Eclipse Foundation) is the only foundation-backed option. |
| Platforms & architectures | Linux x64, aarch64, Windows, macOS, Alpine, ppc64le, s390x | ARM servers (Graviton, Ampere) and Alpine containers are common production targets today; not all vendors support all of them. |
| Commercial support | Is a paid SLA available? | Required for many enterprise procurement processes. Temurin explicitly has none; Azul, BellSoft, Oracle, cloud vendors do. |
| Bundled extras | JavaFX, native-image, crypto provider, tuned defaults | Can save you from assembling them yourself. But extras increase vendor lock-in if you build against them. |
| Infrastructure alignment | Which platforms does your organisation already pay? | Running on AWS? Corretto integrates with AWS support plans. On OpenShift? Red Hat. On SAP? SapMachine. |
Which version? LTS 21 or LTS 25 in 2026
Stay on LTS. In 2026 that's JDK 21 LTS (released Sep 2023, most deployed in production) or JDK 25 LTS (released Sep 2025, current-latest). Non-LTS releases (JDK 22, 23, 24, 26) stop receiving security patches six months after release; never run them in production.
- New project, greenfield: pick JDK 25. Virtual threads are mature, structured concurrency is stable, pattern matching is complete, the FFM API is final.
- Existing project on JDK 21: stay on 21 until you need a 25 feature. Upgrading is cheap; urgency is low. JDK 21 is patched through at least September 2028 by most vendors.
- Legacy on JDK 8 or 11: plan a migration. Most vendors still patch these but you're on borrowed time. Temurin commits 8 through 2026; Corretto 8 through 2026; Zulu and Liberica offer commercial 8/11 support for longer.
Why Eliya ships JDK 25 only
Eliya is Asymm Systems' OpenJDK distribution. It targets JDK 25 LTS exclusively, not JDK 21, not JDK 26, not a dual-LTS matrix. Three reasons:
- JDK 21 is incumbent territory. Temurin, Corretto, Zulu and Liberica all ship mature JDK 21 builds with quarterly patches through at least Sep 2028. Adding another JDK 21 distribution doesn't move the market; it doubles maintenance cost for no positioning gain.
- JDK 26 is non-LTS. Six-month support window. Running a non-LTS release in production is operationally risky regardless of who builds it; Eliya's compliance-conscious audience is the wrong fit for short-window releases. Eliya skips non-LTS entirely.
- One LTS at a time keeps Phase 2+ commitments fundable. Bundled diagnostics, FIPS variant, distroless/UBI images, DEB/RPM, macOS aarch64 (the differentiated work) has to outrank version sprawl. The discipline of saying no to JDK 26 frees resourcing for the work that distinguishes Eliya.
Eliya 25 is supported through September 2029 (four years, aligned with upstream OpenJDK 25u). When JDK 29 LTS lands in September 2027, Eliya 29 ships alongside Eliya 25, at which point Eliya 25 enters a 24-month overlap before sunset. Until then: one LTS, published quarterly with each upstream CPU.
Vendor-by-vendor assessment
Eclipse Temurin (Adoptium)
When to pick: default for almost everything. If you don't have a specific reason to pick otherwise, pick this.
- Backed by the Eclipse Foundation, the only foundation-governed (non-single-vendor) distribution.
- Members include IBM, Microsoft, Red Hat, Alibaba, Azul, Huawei: broad industry investment.
- SDKman's stamped default.
whichjdk.com's primary recommendation. - GPLv2+CE. TCK-verified. Regular quarterly CPUs aligned with upstream.
- LTS support: at least 4 years per LTS, with most LTS lines extending further via third-party collaboration.
- Main caveat: the project itself does not sell commercial support. Adoptium maintains a list of third-party support providers. If procurement requires a single vendor for binaries AND support, Temurin is not the answer.
Amazon Corretto
When to pick: anything running on AWS. Still a solid default everywhere else.
- AWS-maintained. Linux, Windows, macOS, Alpine, Amazon Linux 2 binaries.
- Bundled Corretto Crypto Provider optimised for AWS services.
- AWS Lambda SnapStart reduces Java cold-start latency up to 10×.
- Commercial assistance covered through AWS Support plans; no separate Corretto SKU.
- Main caveat: single-vendor dependency. If you exit AWS your JDK decision is inherited, not chosen.
Azul Zulu
When to pick: you want a Java-focused vendor with long LTS windows and a real commercial support option.
- Azul is a Java-specialist company; Java is the business, not a side project.
- 8-year LTS support (longer than most competitors). Commercial support for Java 6 and 7 available.
- Tiered commercial support: Standard (business hours) vs Premium (24×7×365).
- Also ships Azul Platform Prime, an alternative JVM with C4 pauseless GC, Falcon JIT, and cloud-native compilation. Different product; benchmark before committing.
- Extras: Zulu Mission Control, JVM Inventory / Discovery, OpenJFX builds, applet support.
BellSoft Liberica
When to pick: Spring Boot workloads (Paketo default), applications needing JavaFX bundled, container-heavy deployments, or when you want the widest platform matrix.
- Default JDK in Paketo Buildpacks, meaning every Spring Boot app built with
spring-boot:build-imageruns on Liberica out of the box. - Recommended by VMware for the Spring Framework.
- Broadest platform matrix: Linux (x64, aarch64, aarch32, ppc64le, riscv), Alpine, Windows, macOS. Only major vendor covering 32-bit ARM and RISC-V.
- About 8.5 years LTS support (to 2034), among the longest of the majors (Azul's extended tier runs to 2035).
- Commercial support for Java 6/7 available.
- Product family: Liberica Standard, Liberica Full (with JavaFX + OpenWebStart), Liberica NIK (GraalVM Community-based native image kit), Alpaquita Linux (Alpine fork optimised for Java), Liberica Mission Control, Hardened Container Images (near-zero-CVE).
Oracle JDK
When to pick: you have a specific reason tied to Oracle support contracts. Otherwise, read the licence carefully before defaulting to it.
- Oracle JDK 17+ is distributed under the No-Fee Terms and Conditions (NFTC): free for production, including commercial use.
- NFTC patch window is narrow: one year after the subsequent LTS release. Third-party vendors offer years longer.
- Java SE Universal Subscription for longer support and indemnification is priced per-employee (not per-JVM); this has driven many enterprises to third-party distributions.
- Oracle JDK 8 and 11 require a paid subscription for production use.
- Bottom line: unless you're already paying Oracle for something, third-party distributions are the safer choice.
Oracle OpenJDK (jdk.java.net)
When to pick: don't, for production. Use it for exploring early-access builds and evaluating non-LTS features.
- Oracle only provides updates to each release for six months, even for LTS versions.
- Not a long-term-support distribution by any definition that matters in production.
Microsoft Build of OpenJDK
When to pick: running Java workloads on Azure.
- Free and open-source. Linux, Windows, macOS binaries.
- Quarterly updates for LTS, not JDK 8.
- Commercial support only for Azure customers with an active Azure support plan, and only for workloads on Azure services.
- Binaries may contain Microsoft fixes not yet integrated upstream; migration away from Microsoft Build may encounter minor behavioural differences.
Red Hat build of OpenJDK
When to pick: already standardised on Red Hat Enterprise Linux, OpenShift, or Red Hat Middleware.
- Binaries only on Windows and RHEL.
- OpenJDK entitlement is included in the RHEL subscription; if RHEL retires before the JDK, JDK support ends with it.
- As of July 2025, Red Hat's JDK 8 builds are no longer TCK verified (per their own published policy). Other versions remain TCK-verified.
SAP SapMachine
When to pick: SAP ecosystem. SapMachine is the default runtime for many SAP applications and SAP Business Technology Platform.
- Free, TCK-verified. Linux, Windows, macOS. All LTS except Java 8.
- 4+ years LTS support.
- Commercial support tied to SAP customer contracts in the context of SAP-supported products.
- Patches that don't make it upstream may still land in SapMachine; migration away could hit divergence.
IBM Semeru Runtimes
When to pick: you specifically want OpenJ9 (lower memory footprint than HotSpot) or you're on IBM z / Power / AIX / z/OS.
- Built around OpenJ9, an alternative JVM to HotSpot. This is the defining choice, not "vanilla OpenJDK."
- Open edition (GPLv2+CE) and certified edition (IBM licence).
- IBM Runtimes for Business is the commercial support offering.
- Excellent enterprise platform coverage.
- OpenJ9-specific benefit: lower steady-state memory footprint than HotSpot. Eclipse's own benchmarks report roughly 30–60% lower footprint depending on the workload phase. For containerised microservices where every replica's memory budget matters, this can translate to meaningful cost savings. Benchmark with your specific workload.
Regional / specialist builds
- Alibaba Dragonwell: Alibaba Cloud workloads; strong in China-region deployments; includes performance patches for large-scale Alibaba use cases.
- Tencent Kona: Tencent Cloud workloads; similar regional profile.
- Huawei BiSheng: Huawei-maintained, strong aarch64 and Kunpeng server support.
GraalVM (Oracle) & GraalVM Community
When to pick: you need Ahead-of-Time native compilation (small binary, fast cold start), or polyglot interop.
- GraalVM is a different category of product; it bundles a JDK with a native-image compiler and polyglot runtime.
- Oracle GraalVM ships under a non-free licence for some features; GraalVM Community is Apache/GPL.
- For native image without GraalVM itself, consider BellSoft Liberica NIK (GraalVM CE-based, integrates with Liberica JDK) or Red Hat Mandrel (used by Quarkus).
JetBrains Runtime (JBR)
When to pick: running IntelliJ IDEA, Android Studio, or other JetBrains IDEs. Not a general-purpose server JDK.
- Fork of OpenJDK with fixes specific to running the IntelliJ platform.
- Google explicitly recommends using JBR to run Android Studio (don't set
STUDIO_JDKto override it). - Can technically run other Java applications, but the target use case is the IDE itself.
Eliya JDK
When to pick: compliance-conscious production where forensic-grade JVM diagnostic data is required, especially in regulated industries with data-egress restrictions that prohibit SaaS APM.
Eliya is a Linux-first OpenJDK 25 distribution from Asymm Systems (Sri Lanka) positioned for compliance-conscious production environments across BFSI, healthcare, telecom, government, and other standards-driven industries.
The actual value proposition. Eliya is a forensic-grade JVM platform across four phases:
- Phase 1 (current, shipped 25.0.3): Production operational-readiness defaults via
-XX:EliyaProfile=Production: heap dump on OOM with structured paths, Native Memory Tracking summary mode, crash log path configuration, container awareness reinforced, diagnostic VM options unlocked (JFR + async-profiler one flag away; continuous 24-hour JFR and GC logging by default are Phase 2). Everything written to a three-level filesystem layout (/var/log/eliya/${service}/${replica}/) for per-replica audit attribution. - Phase 2: Bundled local-only diagnostic tooling. No other major OpenJDK distribution bundles Eclipse MAT or async-profiler in the JDK itself. Engineers today install them separately. Eliya bundles both alongside the runtime, sidestepping the "diagnostic tool installation" friction in air-gapped or policy-restricted environments. FIPS-validated variant (
eliya-jdk-fips) with a FIPS-validated provider preinstalled for procurement contexts requiring FedRAMP, FISMA, and other federal-aligned frameworks; sign up on the downloads waitlist. - Phase 3 (post-Series A): Asymm Forensics: cross-correlation platform analysing JFR + heap dumps + thread dumps + GC logs + crash logs together. No APM does this. Local execution, no SaaS dependency.
- Phase 4 (demand-gated): Compliance-aligned profile values (
EliyaProfile=PCIDSS,=HIPAA,=SOX,=FedRAMP,=GDPR,=ISO27001,=SOC2) plus combined profiles (=Healthcare-Paymentfor PCI DSS + HIPAA,=Financial-SaaSfor SOC 2 + ISO 27001, etc.) designed when customer demand justifies.
Things Eliya deliberately does NOT do:
- No GC tuning, no string deduplication, no tiered compilation changes; JDK 25's automatic ergonomics handle these better than a distribution can guess.
- No TLS hardening overlay; upstream JDK 25's
java.securityalready disables weak protocols and ciphers; Eliya doesn't duplicate upstream work. - No SaaS telemetry, no phone-home, no data egress; all diagnostic data stays in your perimeter.
TCK status. Upstream OpenJDK 25 source passes the Java SE 25 TCK. TCK conformance is a property of a specific built binary, not of the source code: every build has to be tested by its maker. Eliya is built from that upstream source, but the Eliya binary is its own build and has not yet been run against the TCK. Asymm Systems is applying under the OpenJDK Community TCK License Agreement (OCTLA); the Eliya binary's own TCK run is a Phase 2 deliverable.
You should consider Eliya when:
- Your environment prohibits SaaS APM due to data-egress restrictions (BFSI settlement systems, healthcare integrations, government workloads, sovereign cloud) and you currently lack the forensic diagnostic data that compliance audits and incident response require.
- You're already running APM but need the per-replica forensic data capture (HPROF heap dumps, textual thread dumps, JFR recordings) that APM tools structurally cannot produce.
- You're planning for Phase 4 compliance-profile adoption (PCI DSS, HIPAA, etc.) and want a JDK whose vendor roadmap aligns with your compliance trajectory.
- You're building with Dial and want the recommended (but not required) runtime.
- You want to run an OpenJDK on FreeBSD: Eliya has a Research Preview planned for late 2026 (community-supported, no CVE SLA); no other major vendor ships FreeBSD binaries.
You should NOT pick Eliya if:
- You need Windows or macOS binaries today: Eliya is Linux-first; macOS aarch64 is Phase 2 demand-gated, Windows is Phase 3 demand-gated.
- You need commercial support with an SLA today: Eliya is community-distributed in Phase 1; commercial support is a Phase 2 consideration.
- You need paid indemnification: use Azul, BellSoft, or Oracle.
- You need JavaFX bundled: use Liberica Full.
- You need a JDK for general workloads where forensic-grade diagnostic data isn't a requirement: Temurin, Corretto, Zulu, or Liberica are mature general-purpose choices with larger operational track records.
Eliya is a new (2026) distribution from Asymm Systems with a specific architectural position: forensic-grade JVM diagnostic data as a production default, designed for environments where SaaS APM is prohibited or insufficient. The credibility for general workloads is not yet earned, and we're explicit that established distributions are better choices for those. If you're in the compliance-conscious niche, Eliya was designed for you. For the full four-phase trajectory and demand-gating mechanics, see the Eliya roadmap. For the full positioning relative to APM tools, see JVM forensics vs APM.
Platform and framework defaults
| Context | Recommended / bundled JDK | Why |
|---|---|---|
Spring Boot with Paketo Buildpacks (build-image) | BellSoft Liberica (default) | Paketo's Java buildpack ships Liberica by default. User can swap via alternative buildpack. |
| AWS Lambda / ECS / EKS | Amazon Corretto | SnapStart for Lambda Java cold-start reduction. Native AWS Support coverage. |
| Azure Functions / App Service | Microsoft Build of OpenJDK | Only one with Azure Support Plan coverage for Azure-hosted workloads. |
| OpenShift / Red Hat Middleware | Red Hat build of OpenJDK | Entitlement included with RHEL subscription. |
| SAP BTP / SAP applications | SapMachine | Default runtime for SAP products; SAP-supported. |
| Elasticsearch | Bundled OpenJDK (don't swap) | Elastic explicitly recommends the bundled JDK; they may not help if you use your own. |
| IntelliJ IDEA / Android Studio | JetBrains Runtime (JBR) | Google and JetBrains both recommend the bundled JBR for the IDE itself. Your project SDK is separate. |
| Minecraft Java Edition | Microsoft-bundled runtime | Microsoft ships a Java 17 / 21 runtime with the Minecraft launcher since 2021. Don't overthink it. |
| Quarkus native image | Red Hat Mandrel (GraalVM CE fork) | Mandrel is the community default for Quarkus native builds. |
| Java desktop app with Swing or JavaFX | Liberica Full JDK | Only major vendor that bundles OpenJFX in the JDK archive. |
| Apache Kafka, Cassandra, Gradle, Maven, Jenkins, generic Linux servers | Any of Temurin / Corretto / Zulu / Liberica | No vendor preference in their docs. Any major LTS build works. |
| Compliance-conscious production in regulated industries (BFSI settlement, healthcare integration, government workloads, air-gapped deployments) | Eliya JDK (evaluate) | -XX:EliyaProfile=Production activates forensic-grade operational-readiness defaults (Phase 1) + continuous observability (Phase 2) that survive incidents and crashes. Benchmark against Temurin if observability data isn't a primary requirement. |
| FreeBSD | FreeBSD ports openjdk25 or Eliya FreeBSD Research Preview | No other vendor ships binaries. Ports collection is the standard; Eliya Preview is a signed build option. |
Switching is cheap: benchmark, don't debate
Every major distribution is installable side-by-side via SDKman in seconds:
Run your workload under each with production-representative load. Measure tail latency, throughput, allocation rate, and GC pause distribution. Pick the one that wins on your actual workload, not the one that sounds best on the vendor's marketing page.
In our own internal benchmarking across request-processing workloads, the choice between major vendors on the same underlying HotSpot usually matters less than 5%, within noise for many deployments. The tuning flags matter far more than the vendor brand.
References
- whichjdk.com: the canonical independent JDK recommendation site
- sdkman.io/jdks: full list of distributions on SDKman with suffix references
- Tom Gregory: Which JDK version and vendor
- Eclipse Adoptium (Temurin)
- Amazon Corretto
- Azul Zulu (Platform Core)
- BellSoft Liberica JDK
- Paketo Buildpacks: Java howto
- Eliya JDK (Asymm Systems)
About this guide
Written by the team behind Eliya JDK, a distribution we ship specifically for compliance-conscious production in regulated industries where forensic-grade JVM diagnostic data is a requirement. We tried to be honest about our own niche, and to send you to a better fit when Eliya isn't one. If you find an error or a missing distribution, email research@asymm.systems.
For how JDK choice relates to APM tools (which all JDKs can use), see JVM forensics vs APM.