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 |
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.xsdk install gradle— Gradle 8.xsdk install kotlin— Kotlin (if you dabble)sdk install springboot— Spring Boot CLIsdk 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_64Java 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