Java
 Computer >> コンピューター >  >> プログラミング >> Java

JDK・JRE・JVMの違いとは?初心者にもわかる役割と関係性を徹底解説

Javaを学び始めると必ず出てくるのが「JDK」「JRE」「JVM」という3つの用語です。この3つは互いに密接に関連し合っており、独立した存在ではありません。そのため、単純な表形式だけで違いを説明するのは不十分ですが、本記事ではそれぞれの役割を順に解説し、最後に比較表で整理します。

JVM(Java Virtual Machine)とは

JVMは「Java Virtual Machine(Java仮想マシン)」の略称です。Javaバイトコードを実行するためのランタイム環境を提供する仕様であり、抽象的な概念として定義されています。実装アルゴリズムの選択は各ベンダーに委ねられており、Sun Microsystems(現Oracle)をはじめとする複数の企業が独自の実装を提供しています。

JVMの最も重要な役割は、バイトコードをOSやハードウェア固有のマシンコードへ変換することです。これにより「Write Once, Run Anywhere」と呼ばれるJavaのプラットフォーム非依存性が実現されています。また、JVMは他の言語で書かれ、Javaバイトコードへコンパイルされたプログラム(KotlinやScalaなど)も実行できます。

JVMが担う主なタスクは以下の4つです。

  • コードのロード(クラスローダによる読み込み)
  • コードの検証(バイトコードベリファイアによる安全性チェック)
  • コードの実行
  • ランタイム環境の提供(メモリ管理やガベージコレクションを含む)

JRE(Java Runtime Environment)とは

JREは「Java Runtime Environment(Java実行環境)」の略称で、JVMの仕様を実際に実装したものです。JVMで定義された仕様に基づき、コードを実行するための環境を構築します。JREは物理的に実体が存在し、主にJavaバイナリとプログラム実行に必要な各種クラス群で構成されています。

JREには、Javaバイナリに加えて、以下のような要素も含まれています。

  • デプロイメント技術(Java Web Start、Java Plug-inなど)
  • 実行中のコードと対話するためのユーザーインターフェース
  • さまざまな機能を支える基底ライブラリ
  • 言語系およびユーティリティ系ライブラリ

つまりJREは、「作成したJavaアプリケーションをエンドユーザーの環境で動かすために必要な一式」と考えるとわかりやすいでしょう。

JDK(Java Development Kit)とは

JDKは「Java Development Kit(Java開発キット)」の略称で、Javaプログラムのコンパイル、デバッグ、実行に必要なすべてのツール、実行ファイル、バイナリを含むソフトウェア開発キットです。

JDKはプラットフォーム依存であり、Windows、macOS、Unix(Linux)といったOSごとに専用のインストーラが用意されています。また、JDKにはJVMとJREの両方が含まれており、コードの実行までを完全に担います。さらに、JDKのバージョン番号がそのままJavaのバージョンを表す点も重要な特徴です。

JDK・JRE・JVMの重要な違いを比較表で整理

以下の表は、JDK、JRE、JVMの重要な違いをまとめたものです。

No.項目JDKJREJVM
1 定義 JDK(Java Development Kit)は、Javaでアプリケーションを開発するためのソフトウェア開発キット。JREに加えて、コンパイラ、JavaDoc、Javaデバッガなどの多数の開発ツールを含む。 JRE(Java Runtime Environment)はJVMの実装であり、Javaクラスライブラリ、JVM、その他のコンポーネントを含み、Javaで書かれたアプリケーションの実行を可能にするソフトウェアパッケージ。 JVM(Java Virtual Machine)はプラットフォーム依存の抽象マシン。「仕様(JVM実装の要件を記述したドキュメント)」「実装(要件を満たすコンピュータプログラム)」「インスタンス(Javaバイトコードを実行する具体的な実装)」という3つの概念を持つ。
2 主な機能 コードの実行に加え、開発こそがJDKの主要な機能。 一方JREは、コードを実行するための環境を構築することに特化している。 JVMはすべての実装を規定し、それらの実装をJREへ提供する役割を担う。
3 プラットフォーム依存性 JDKはプラットフォーム依存。異なるプラットフォームごとに対応するJDKが必要。 JDKと同様に、JREもプラットフォーム依存。 JVM自体はプラットフォーム非依存として機能する。
4 ツール 開発が主目的のため、Javaアプリケーションの開発・デバッグ・監視のためのツールを含む。 コンパイラやデバッガなどの開発ツールは含まず、代わりにJVMがプログラムを実行するのに必要なクラスライブラリやサポートファイルを含む。 ソフトウェア開発ツールは含まない。
5 構成 JDK = JRE + 開発ツール JRE = JVM + アプリケーション実行用ライブラリ JVM = Javaバイトコードを実行するためのランタイム環境のみ

まとめ:3者の関係性を押さえよう

JDK、JRE、JVMは「入れ子」の関係にあると理解すると整理しやすくなります。最も内側にJVMがあり、JVM+ライブラリでJREが構成され、さらにJRE+開発ツールでJDKが構成されます。つまり、Javaアプリケーションを「開発する人」にはJDK、「実行するだけの人」にはJREが必要であり、どちらの場合でも実際にコードを動かしているのはJVMだということです。この関係性を正しく理解しておくことで、Javaの開発環境構築やトラブルシュートが格段にスムーズになります。

  1. Javaのwait()メソッドとsleep()メソッドの違いを徹底解説

    Javaのマルチスレッドプログラミングでは、sleep()メソッドとwait()メソッドのどちらもスレッドの処理を一時停止させるために使用されますが、両者にはいくつかの重要な違いがあります。本記事では、それぞれの特徴と相違点をわかりやすく解説します。 sleep()メソッドとwait()メソッドの主な違い 1. メソッドの種類と影響範囲 sleep()メソッドはThreadクラスのstatic(静的)メソッドであり、呼び出すと現在実行中のスレッドを「実行不可能(Non-Runnable)」状態にします。 一方、wait()メソッドはインスタンスメソッドであり、スレッドオブジェクトではなく対象の

  2. JREとJDKの違いは何?Java開発初心者向けにわかりやすく解説

    Javaを学び始めると、必ず耳にするのが「JDK」と「JRE」という2つの用語です。名前が似ているため混同されやすいのですが、それぞれ役割や含まれる機能が異なります。この記事では、両者の違いを初心者にもわかりやすく解説します。 JDK(Java Development Kit)とは JDKは「Java Development Kit」の略で、Javaアプリケーションの開発と実行に必要なすべてのツールおよびライブラリをまとめたソフトウェアパッケージです。 JDKには以下のようなものが含まれています。 コンパイラ(javac):ソースコード(.javaファイル)をバイトコード(.classファイ