MEDIA

メディア

  1. TOP
  2. メディア
  3. プログラミング
  4. Java SEとは?JDK・JRE・JVMの違いと関係を図解で整理

Java SEとは?JDK・JRE・JVMの違いと関係を図解で整理

しかし、Javaを学び始めたり業務で環境構築をしたりすると、「Java SE」「JDK」「JRE」「JVM」が同時に出てきて混乱しがちです。

そのため本記事では、まずJava SE=仕様と標準APIの範囲という位置づけから整理し、次にJDK/JRE/JVM=実際に動かすための配布物として役割分担をつなげます。

さらに、OpenJDK/Oracle JDKの選び方、Jakarta EE(旧Java EE)との関係、そしてLTSを軸にしたバージョン運用まで、実務で迷わない判断軸としてまとめます。


Java SEの位置づけと役割

まず、Java SE(Standard Edition)はJavaプラットフォームの基礎であり、Javaで共通に使える基本機能の標準セット(仕様と標準API)です。

つまり、Java SEは「インストーラ」や「アプリ」そのものではありません。

例えば、PCへ導入するのはJDKなどの配布物であり、その中身がJava SE仕様に準拠しているという関係です。

Java SEは「互換性の基準」だと捉える

さらに重要なのは、Java SEが互換性の基準として機能する点です。

例えば、チームで「Java SE 17相当の機能で開発する」と決めれば、標準APIの範囲や言語仕様が揃い、環境差による不具合を減らせます。

公式の仕様としては、OracleのJava SE Specificationsが一次情報になります。

Java SE Specifications(一次情報)

Java SEに含まれるもの(標準ライブラリ・API)

一方で、Java SEに含まれるのは「言語仕様」だけではありません。

例えば、文字列処理、コレクション、入出力、ネットワーク、日時処理など、業務アプリで頻出する機能が標準APIとして体系的に提供されます。

そのため、まず標準APIで解決できるかを検討するのは堅実です。

なぜなら、依存ライブラリを増やすほど、アップデート対応や脆弱性対応が難しくなるからです。

標準APIでどこまでできるかが「設計の強さ」になる

例えば、ファイル操作ならNIO.2、HTTPなら標準のHTTPクライアント(バージョンにより扱いは異なる)など、標準で実務の多くを支えられます。

したがって「標準APIで解ける問題」を把握しておくと、導入判断が過剰にならず、保守しやすい構成に落とし込みやすくなります。


JDK・JRE・JVMの違い

結論から言うと、JVMは実行の心臓部、JREは実行に必要な一式、JDKは開発に必要な一式です。

つまり、整理としてはJDK ⊃ JRE ⊃ JVMと覚えると混乱しにくくなります。

用語 一言で 主な用途 含むもの(イメージ)
JVM 実行エンジン バイトコードを実行 JIT/GCなど実行時機構
JRE 実行環境一式 アプリを動かす JVM+標準ライブラリなど
JDK 開発環境一式 作る・ビルド・動かす JRE+javac/jar/javadoc等
Java SE 仕様・標準APIの範囲 互換性の基準 言語仕様+標準ライブラリの定義

混乱の原因は「種類の違い」

しかし、Java SEはルール(仕様)の名前で、JDK/JRE/JVMは配布物(実体)の名前です。

そのため、同じ列に並べて比較すると迷子になりがちです。

まず「Java SE=標準の範囲」、次に「それを実現する配布物=JDKディストリビューション」と分けると、整理が一気に進みます。


JVMとは

さらに、JVM(Java Virtual Machine)は、Javaのクラスファイル(バイトコード)を実行する仮想マシンです。

JavaはOSが直接実行する形式ではなく、まずバイトコードとして出力され、それをJVMが各OS上で実行します。

JITとGCは「実務の品質」に直結する

例えば、JIT(Just-In-Time)コンパイルは実行中に最適化して高速化します。

一方で、GC(Garbage Collection)は不要になったメモリを回収し、メモリ管理の責務を担います。

したがって、パフォーマンス問題を切り分ける際にも「JVMの挙動」を知っていると議論が速くなります。


JREとは

一方で、JRE(Java Runtime Environment)は、Javaアプリを動かすために必要な一式です。

中心となるJVMに加え、Java SEの標準ライブラリなど、実行時に必要な部品が含まれます。

近年は「JRE単体を入れる」前提が弱い

しかし近年は、JRE単体の提供が少なくなり、JDKに同梱される形や、アプリ側で必要ランタイムを同梱する形が一般的になっています。

そのため実務では「実行にJREを入れる」よりも、「どの配布物のランタイムを使い、誰がいつ更新するか」を決める方が重要です。


JDKとは

そして、JDK(Java Development Kit)は、Javaの開発に必要な一式です。

JRE(実行環境)に加えて、コンパイラや各種ツールが含まれます。

代表的ツール(開発者が覚えるべき最小セット)

  • javac:ソースコードをクラスファイルへ変換
  • jar:クラスやリソースをまとめて配布
  • javadoc:APIドキュメント生成

したがって、学習者・開発者は基本的にJDKを入れるのが正解です。


JDK・JRE・JVMとJava SEの関係

つまり、Java SEは「標準仕様と標準APIの範囲」を指し、JVM/JRE/JDKはそれを実際に使える形で提供するソフトウェアのまとまりです。

例えば、Java SEがルールブック、JDK/JREが道具箱、JVMが実行エンジンという関係に近いです。

実務で重要なのは「バージョンの一致」

さらに、互換性の観点では「どのJava SEバージョンに準拠しているJDKか」が重要です。

そのため、開発者PCと本番環境でバージョンがズレると、動作差やビルドエラーの原因になります。

結果として、Java SEのバージョンと配布物のバージョンをセットで管理するのが実務的です。


Java SEとJava EE(Jakarta EE)・Java MEの違い

また、Javaには用途別にエディションがあり、Java SEを基盤として、サーバー/エンタープライズ向けのJakarta EE、組み込み/小型デバイス向けのJava MEが整理できます。

Jakarta EE(旧Java EE)は「SEの上乗せ」

例えば、ServletやJPAのようなWeb/エンタープライズ向け仕様は、SEの置き換えではなく、SEを前提にした上乗せとして整理されます。

なお、Java EEがEclipse Foundationへ移管され、Jakarta EEへ改称された経緯はEclipse側の一次情報で確認できます。

Jakarta EE改称(Eclipse公式)

Java MEは「制約環境向け」

一方で、Java MEは組み込み機器など、制約のある環境向けに最適化されたAPI群です。

したがって、一般的な業務アプリや学習はSE、Web標準仕様群が必要ならJakarta EE系、組み込みならMEという用途ベースで判断すると安全です。


OpenJDKとOracle JDKの違い

しかし、同じJavaでも入手元(ディストリビューション)により、配布形態・サポート期間・ライセンスや商用サポートの考え方が変わります。

多くのケースで機能差そのものは小さい一方、アップデート提供、サポート期限、問い合わせ窓口の有無が実務上の差になります。

ディストリビューションとは何か

つまり、ディストリビューションとは、OpenJDKのソースコードをもとに各社がビルドして提供するJDK配布物(バイナリ)です。

例えば、Eclipse Adoptium(Temurin)などが代表例です。

OpenJDK(一次情報)

ライセンスは「必ず最新の公式FAQで確認する」

さらに、Oracle JDKのライセンス(NFTC等)や提供期間は、状況により判断が分かれるため、導入時は公式FAQで最新条件を確認してください。

Oracle JDKライセンスFAQ(一次情報)


Java SEのバージョンとLTS

一方で、Javaは定期的にバージョンアップされます。

そのため実務では、短期リリースとLTS(Long Term Support)を分け、運用計画とセットでバージョンを決めるのが安定します。

半年リリースの根拠(JEP 322)

さらに、Javaが半年ごとのリリースモデルへ移行した根拠として、OpenJDKのJEP 322が一次情報になります。

JEP 322: Time-Based Release Versioning

本番はLTS中心になりやすい(データ補強)

例えば、New Relicのレポートでは、非LTSを本番で使うアプリは2%未満で、LTS中心の傾向が示されています。

また、2023年から2024年にかけてJava 17の採用が大きく伸びた点も、運用上は「LTSを基準にしやすい」ことの裏付けになります。

2024年 Javaエコシステムの現状(New Relic)


Java SEのダウンロードとインストール手順(最短で詰まらない流れ)

したがって、目的(学習/開発/実行)に応じて基本はJDKを入れ、入手元を決めたうえでOS別にインストールし、コマンドで導入確認まで行うのが確実です。

導入後に必ずやる確認(java と javac)

まずは、実行環境の確認として java -version、開発環境の確認として javac -version を実行します。

java -version
javac -version

しかし、期待したバージョンが出ない場合は、複数インストールやPATH優先順位が原因になりがちです。

そのため、PATHやJAVA_HOMEを含めた整理が必要なら、以下の関連記事もあわせて読むと理解が繋がります。


Java SEとはの要点まとめ

最後に、要点を一枚で回収します。

  • Java SEは標準仕様と標準APIの範囲で、互換性の基準になる
  • JVMは実行エンジン、JREは実行一式、JDKは開発一式(整理としてはJDK ⊃ JRE ⊃ JVM)
  • Jakarta EE(旧Java EE)はSEの上乗せ、MEは制約環境向け
  • OpenJDK/Oracle JDKは機能差より更新・サポート・ライセンスが実務差になる
  • バージョンはLTS基準が安定しやすく、半年リリース(JEP 322)を前提に運用設計する

つまずいたら、現役エンジニアと一緒に解決しよう

この記事で扱った【Java】は、独学だと細部で詰まりやすい分野です。さらに理解を深めたい方は、Zerocodeで実務直結の学習を進めてみませんか。

現役エンジニア1on1

コード添削・詰まり解消を丁寧にサポート。

実務設計まで網羅

Java/SQL/Spring Bootを体系的に習得。

ポートフォリオ支援

現場で刺さる成果物づくりを伴走。

完全オンライン

時間と場所を選ばず学べます。

Join us! 未経験からエンジニアに挑戦できる環境で自分の可能性を信じてみよう 採用ページを見る→

記事監修

ドライブライン編集部

[ この記事をシェアする ]

記事一覧へ戻る