1.

Java プラットフォーム完全ガイド — SE/EE/JDK/JVM

編集
この記事の要点
  • Java プラットフォームは用途別に Java SE (Standard) / Java EE → Jakarta EE (サーバ) / Java ME (組込) に分かれる
  • JDK (開発者用) = JRE + コンパイラ + ツール、JRE (実行のみ) = JVM + 標準ライブラリ
  • JVM 実装: Oracle HotSpot (デファクト) / OpenJ9 (IBM) / GraalVM (ネイティブイメージ対応)
  • LTS バージョン: Java 8 / 11 / 17 / 21 が長期サポート。それ以外は短期 (6 ヶ月毎)
  • ディストリビューション: Oracle JDK (商用は有償) / OpenJDK / Amazon Corretto / Eclipse Adoptium Temurin / Azul Zulu / Microsoft Build of OpenJDK

3 つのプラットフォームエディション

エディション用途主要 API現状
Java SE (Standard Edition)デスクトップ / 一般用途 / バックエンドの基盤java.lang, java.util, java.io, java.nio, java.net, java.time現役
Java EEJakarta EEエンタープライズサーバ(Web/DB/メッセージング)Servlet, JSP, JPA, EJB, CDI, JMS, JAX-RSOracle → Eclipse Foundation 移管 (2018)、Jakarta EE 8/9/10
Java ME (Micro Edition)組込・フィーチャーフォン限定的ほぼ衰退、IoT は Java SE Embedded へ

JDK / JRE / JVM の違い

名前正式名役割含むもの
JDKJava Development Kit開発者用(コンパイル含む)JRE + javac, javadoc, jar, jdb, jshell 等
JREJava Runtime Environment実行のみJVM + 標準ライブラリ
JVMJava Virtual Machineバイトコードを実行する VMクラスローダ / 実行エンジン / GC

Java 9 からは JRE 単体配布が廃止され、jlink で必要モジュールだけ含めたカスタムランタイムを作るのが現代的です。

# バージョン確認
java  -version    # JRE 機能(実行系)
javac -version    # JDK 機能(コンパイラ)

# 出力例
# openjdk version "21.0.1" 2023-10-17 LTS
# OpenJDK Runtime Environment Temurin-21.0.1+12 (build 21.0.1+12-LTS)
# OpenJDK 64-Bit Server VM Temurin-21.0.1+12 (build 21.0.1+12-LTS, mixed mode)

JVM 実装の比較

JVM提供特徴
HotSpotOracle / OpenJDKデファクト。JIT (C1/C2) コンパイラ、G1 GC / ZGC
OpenJ9IBM (Eclipse)メモリフットプリント小、起動高速。コンテナに有利
GraalVMOracle Labs多言語対応 (Polyglot)、Native Image でネイティブバイナリ化
Azul Zing (Prime)Azul Systems低レイテンシ GC (C4) 商用

Java バージョンと LTS

バージョンリリースLTS主な追加機能
Java 82014-03ラムダ式、Stream API、java.time、default メソッド
Java 92017-09モジュールシステム (Jigsaw)、jshell
Java 102018-03var 型推論
Java 112018-09HttpClient 標準化、ZGC (実験)、Single File Run
Java 142020-03record (プレビュー)、switch 式
Java 172021-09sealed クラス、record 正式、pattern matching
Java 212023-09仮想スレッド (Virtual Threads)、record パターン、Sequenced Collections

2018 年から6 ヶ月ごとのリリースになり、3 年ごとに LTS 指定(Java 17 → 21 → 25 …)です。非 LTS は次バージョンが出ると保守終了。

ディストリビューション (ベンダー)

ベンダー名称ライセンス備考
OracleOracle JDK商用は有償 (Java 17 以降の本番)開発・テストは無料 (NFTC ライセンス)
OracleOpenJDKGPL+CEリファレンス実装
AmazonCorretto無料AWS / 本番運用に最適化
Eclipse FoundationAdoptium Temurin無料旧 AdoptOpenJDK の後継、コミュニティ標準
AzulZulu (無料) / Zing (有償)無料 / 有償Zing は低レイテンシ GC
MicrosoftMicrosoft Build of OpenJDK無料Azure 親和性
Red HatOpenJDKRHEL に同梱RHEL サブスクで商用サポート
BellSoftLiberica JDK無料Spring Boot 推奨

Oracle ライセンスの変遷

  • ~Java 8 (2019 年 4 月まで): Oracle JDK は商用無料、Premier Support 終了後は有償
  • Java 11 (2019 年): Oracle JDK 商用利用は有償サブスクリプション必須(無料は開発・テストのみ)
  • Java 17 以降 (2021 年 9 月~): NFTC (No-Fee Terms and Conditions) ライセンスで本番でも無料(次の LTS リリース後 1 年は無料)
  • Java 21 (2023 年): 同じく NFTC で無料

OpenJDK ベースのTemurin / Corretto / Liberica は商用も無料で、本番にはOpenJDK 系を選ぶのが現代の定石です。

インストールと切替 (sdkman)

# sdkman 導入
curl -s "https://get.sdkman.io" | bash

# 利用可能 JDK 一覧
sdk list java

# Temurin 21 をインストール
sdk install java 21.0.1-tem

# Corretto 17 もインストール
sdk install java 17.0.9-amzn

# プロジェクト毎に切替
sdk use java 21.0.1-tem
sdk default java 17.0.9-amzn

Java SE と Jakarta EE の境界

Java EE 8 (2017) を最後に Oracle が Eclipse Foundation へ移管し、Jakarta EE となりました。パッケージ名も javax.*jakarta.* へ変更(Jakarta EE 9 から)。

// 旧 (Java EE 8 まで)
import javax.servlet.http.HttpServletRequest;
import javax.persistence.Entity;

// 新 (Jakarta EE 9+)
import jakarta.servlet.http.HttpServletRequest;
import jakarta.persistence.Entity;

Spring Framework は6.0 から jakarta.* に完全移行。Spring Boot 3.0 以降は Jakarta EE 9 互換 (Tomcat 10 系) となり、Java 17+ が必須です。

FAQ

Q: 業務で使うならどのバージョン?
A: 2026 年現在は Java 17 か 21。Spring Boot 3 は Java 17+ 必須。新規案件は Java 21 LTS が無難。

Q: Oracle JDK を本番で使うとライセンス料がかかる?
A: Java 17/21 は NFTC で無料利用可(次 LTS 後 1 年)。心配ならTemurin / Correttoを選べば確実に無料。

Q: GraalVM Native Image のメリットは?
A: 起動が数十 ms、メモリ削減大。サーバレス (Lambda) や CLI ツールに最適。リフレクション制限あり。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. プラットホーム
  2. 環境構築
  3. 文法
  4. API
  5. Servlet(サーブレット)
  6. JSP
  7. Applet(アプレット)
  8. デザインパターン
  9. フレームワーク
  10. ライブラリ
  11. Androidアプリケーション
  12. Project Jigsaw
  13. エラー一覧
  14. 日付の加算、減算
  15. 文字列の数字チェック
  16. 改行コードの削除
  17. 先頭と末端の文字の削除
  18. warファイルの中身を確認する方法
  19. nullもしくは空文字の判定
  20. beanの中身を確認する方法
  21. org.apache.log4j.Logger のログ出力で printStackTrace() のエラー内容を出力する方法
  22. Javaのバージョン確認方法