JDK Choice — Which Java Do You Actually Install

The JDK vendor question generates more Reddit heat than actual difference. Here is the honest truth: for 95% of use cases, any modern OpenJDK-based build works identically. What matters is picking one, using SDKMAN to switch versions, and moving on. This file makes the choice for you.

The Decision Tree

Are you on AWS in production? -----> Amazon Corretto
                                     (else)
Are you building for GraalVM AOT? --> GraalVM CE / Oracle GraalVM
                                     (else)
Is Zoho corporate policy specific? -> Follow it
                                     (else)
Default answer -----------------------> Eclipse Temurin (Adoptium)

The Comparison Table

Distribution

Vendor

Cost

License

LTS Support

Verdict

Eclipse Temurin

Eclipse Adoptium (community)

Free

GPLv2+CE

LTS releases supported ~4-8 yrs by community

DEFAULT. Most portable, most-used, works everywhere. adoptium.net

Amazon Corretto

Amazon

Free

GPLv2+CE

Amazon commits 4+ yrs LTS

USE ON AWS. Tuned for AWS runtime, small perf edge on EC2. aws.amazon.com/corretto

Azul Zulu

Azul Systems

Free (Community); Paid (Prime with Falcon JIT + C4 GC)

GPLv2+CE (Community)

Zulu Community 8+ yrs LTS

SITUATIONAL. Zulu Prime ($$$) has C4 pauseless GC. Community edition = fine but no clear edge over Temurin.

Oracle JDK

Oracle

Free for dev + production under NFTC license since Java 17

Oracle NFTC

Oracle commercial LTS 8 yrs

SKIP for personal. Same code as OpenJDK. License terms change; Temurin is safer.

GraalVM CE

Oracle (community)

Free

GPLv2+CE

Tracks JDK releases

INSTALL as SECOND JDK. Use for native-image AOT compilation experiments in M6-M8. graalvm.org

BellSoft Liberica

BellSoft

Free (Standard); paid support

GPLv2+CE

LTS 8+ yrs

Ships a “Full” bundle with JavaFX — useful only for desktop Swing/JavaFX.

Microsoft OpenJDK

Microsoft

Free

GPLv2+CE

Microsoft supports for Azure

For Azure-heavy shops. Not relevant to Zoho.

IBM Semeru

IBM (OpenJ9 VM)

Free

GPLv2+CE / EPL

4+ yrs

AVOID unless you need OpenJ9. Different VM (OpenJ9 vs HotSpot); some benchmarks differ. Rare in India stacks.

LTS vs Feature Releases

Java releases every 6 months. LTS every 2 years. Non-LTS versions have 6 months of support then EOL.

Version

Released

LTS?

End of Free Support

Use It For

Java 21

Sep 2023

YES

2028+ (Temurin)

PRIMARY. Virtual threads final, pattern matching. Default for new projects.

Java 25

Sep 2025

YES

2033+ (Temurin)

Latest LTS. Adopt when project dependencies support.

Java 22

Mar 2024

No

Sep 2024 (dead)

Skip.

Java 23

Sep 2024

No

Mar 2025 (dead)

Skip.

Java 24

Mar 2025

No

Sep 2025 (dead)

Skip.

Java 17

Sep 2021

YES

2029+

Second target. Most enterprise Spring Boot 3 shops on 17 still.

Java 11

Sep 2018

YES

2026 (Corretto/Temurin extended)

Legacy. Only if a Zoho monolith requires.

Java 8

Mar 2014

YES

2030+ (Temurin/Corretto extended paid)

Ancient legacy. Old Zoho / TCS / Infosys projects. Painful.

Rule: for personal projects, use Java 21 or Java 25. For work at Zoho, use whatever the project team is on.

Installing via SDKMAN

SDKMAN is the correct way to manage JDKs on macOS and Linux. On Windows, use SDKMAN via WSL2 or use Scoop / Chocolatey.

# Install SDKMAN
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"

# Verify
sdk version

# List Java candidates
sdk list java

# Install Java 21 Temurin (pick from list)
sdk install java 21.0.5-tem

# Install Java 25 Temurin
sdk install java 25.0.1-tem

# Install GraalVM 21 for AOT experiments
sdk install java 21.0.5-graalce

# Set default
sdk default java 21.0.5-tem

# Switch shell to a specific version
sdk use java 25.0.1-tem

# See current
sdk current java

Per-Project JDK Pinning

Create .sdkmanrc in your project root:

java=21.0.5-tem

Then sdk env (or auto-env if you enable it in ~/.sdkman/etc/config) switches when you cd into that project. This ends the “wrong JDK” bug forever.

Also via SDKMAN

  • sdk install maven — Maven 3.9.x

  • sdk install gradle — Gradle 8.x

  • sdk install kotlin — Kotlin (if you dabble)

  • sdk install springboot — Spring Boot CLI

  • sdk install jbang — for running Java scripts

The Apple Silicon Note

If you’re on M1/M2/M3/M4 Mac (increasingly common in India from 2023+):

  • All modern JDKs ship native aarch64 builds — no Rosetta needed since Java 17.

  • Temurin, Corretto, Zulu all offer aarch64 — SDKMAN picks automatically.

  • Avoid x86_64 Java on Apple Silicon — 2-3x slower.

The Windows Note

If you’re on Windows (some Zoho offices default to Windows):

  • Install WSL2 + Ubuntu → use SDKMAN inside WSL. Cleanest option.

  • Or use Scoop (scoop install temurin-lts-jdk) as fallback.

  • Avoid the Oracle installer .exe — puts registry keys everywhere.

What NOT to Do

  • Do NOT install Java from java.com (that’s the JRE, not JDK).

  • Do NOT install multiple JDKs without SDKMAN. Path chaos.

  • Do NOT mix Homebrew Java with SDKMAN. Pick one.

  • Do NOT install Oracle JDK for pure learning. No benefit over Temurin.

Verification

After install, in a fresh terminal:

java -version
javac -version
mvn -version

All three should show the SDKMAN-managed JDK path. If they don’t, sdk flush and re-source your shell.

Return to README.md · Next: 02_ide_and_editor.md