JVM vs. JRE vs. JDK:違いとは。

チームメンバーの前で壁に書き込むエンジニア

Javaは、今日の開発環境で使用されている最も人気のあるプログラミング言語の1つです。主にバックエンド開発プロジェクト、ゲーム開発、デスクトップおよびモバイル・コンピューティングに使用されます。Java仮想マシン(JVM)、Javaランタイム環境(JRE)、Java開発キット(JDK)がJava開発プロセスにおいてそれぞれどのような役割を果たすのか、ぜひお読みください。また、それぞれの関係性や違いについても解説します。

The DX Leaders

AI活用のグローバル・トレンドや日本の市場動向を踏まえたDX、生成AIの最新情報を毎月お届けします。登録の際はIBMプライバシー・ステートメントをご覧ください。

ご登録いただきありがとうございます。

ニュースレターは日本語で配信されます。すべてのニュースレターに登録解除リンクがあります。サブスクリプションの管理や解除はこちらから。詳しくはIBMプライバシー・ステートメントをご覧ください。

Java仮想マシン(JVM)とは

Java仮想マシン(JVM)は、Javaバイトコードをロード、検証し、実行します。Javaプログラミングを実行するため、Javaプログラミング言語のインタプリタまたはコアとして知られています。

JavaにおけるJVMの役割

JVMはバイトコードをマシン固有のコードに変換する役割を担っており、JDKとJREの両方で必要です。また、プラットフォームに依存しており、メモリー管理やセキュリティーを含む多くの機能を実行します。さらに、JVMでは、Javaバイトコードに変換された他のプログラミング言語で記述されたプログラムも実行できます。

Javaネイティブ・インターフェース(JNI)は、JVMに関連して呼ばれることがよくあります。JNIは、JVMで実行されるJavaコードが、ハードウェアや特定のオペレーティング・システム・プラットフォームに関連付けられたアプリケーションと通信できるようにするプログラミング・フレームワークです。これらのアプリケーションはネイティブ・アプリケーションと呼ばれ、多くの場合、他の言語で作成できます。ネイティブ・メソッドは、他の言語で作成されたネイティブ・コードをJavaアプリケーションに移すために使用されます。

JVMコンポーネント

JVMは、3つの主要なコンポーネントまたはサブシステムで構成されています。

  • クラス・ローダー・サブシステムは、Javaクラス・ファイル(つまり「Javaファイル」)のロード、リンク、初期化を担当します。
  • ランタイム・データ領域には、メソッド領域、PCレジスター、スタック領域、およびスレッドが含まれます。
  • 実行エンジンには、インタプリタ、コンパイラ、ガベージコレクション・エリアが含まれます。
アプリケーション開発

さあ、クラウドでエンタープライズ・アプリケーション開発を始めましょう

この動画では、Peter Haumer博士が、IBM Z Open Editor、IBM Wazi、Zoweなどのさまざまなコンポーネントとプラクティスを実演しながら、ハイブリッドクラウドでの最新エンタープライズ・アプリケーション開発について説明します。

Javaランタイム環境(JRE)とは。

Java Runtime Environment(JRE)は、システム上でJavaプログラムまたはアプリケーションを実行するためのソフトウェア・ツールのセットです。

JREは、Javaオブジェクトへの動的メモリー割り当てにヒープ空間を使用します。JREはJDB(Javaデバッグ)でも使用されます。

JavaにおけるJREの役割

プログラマーがJavaコマンドを使用してJavaプログラムを実行したい場合は、JREをインストールする必要があります。インストールだけを行う(コードの開発やコンパイルを行わない)場合は、JREのみが必要です。

JREコンポーネント

JREは、Java仮想マシン以外にも、Javaアプリケーションを最大限に活用するためのさまざまなサポート・ソフトウェア・ツールや主要な機能で構成されています。

  • デプロイメント・ソリューション:JREのインストールの一部として、アプリケーションの有効化を簡素化し、将来のJavaアップデートに対する高度なサポートを提供する、Java Web StartやJavaプラグインなどのデプロイメント・テクノロジーが含まれています。
  • 開発ツールキット:JREには、開発者のユーザー・インターフェースの改善を支援するために設計された開発ツールも含まれています。以下に、これらのタスクの一部を挙げます。
    • Java 2D:Java言語で2次元グラフィックスを描画するために使用されるアプリケーション・プログラミング・インターフェース(API)。開発者は、豊富なユーザー・インターフェース、特殊効果、ゲーム、アニメーションを作成できます。
    • 抽象的なWindowsツールキット(AWT):オブジェクト、ボタン、スクロール・バー、およびウィンドウの作成に使用されるグラフィカル・ユーザー・インターフェース(GUI)です。
    • Swing:豊富なウィジェットセットを使い、柔軟でユーザーフレンドリーなカスタマイズを提供する、もうひとつの軽量GUIです。
  • 統合ライブラリー:Javaランタイム環境は、開発者がアプリケーションとサービスの間にシームレスなデータ接続を作成するのを支援する、いくつかの統合ライブラリーとクラス・ライブラリーを提供します。これらのライブラリーには、次のようなものがあります。
    • Java IDL:Common Object Request Brokerage Architecture(CORBA)を使用して、Javaプログラミング言語で書かれた分散オブジェクトをサポートします。
    • Java Database Connectivity(JDBC)API:開発者がリモート・リレーションシップ・データベース、フラット・ファイル、スプレッドシートにアクセスできるアプリケーションを作成するためのツールを提供します。
    • Java Naming and Directory Interface(JNDI):命名規則を使用してデータベースから情報を取得できるポータブル・アプリケーションを作成できるようにするプログラミング・インターフェースとディレクトリ・サービスです。
  • 言語およびユーティリティー・ライブラリー:JREに含まれているのはJava.langです。およびJava.utilを使用します。Javaアプリケーションの設計、パッケージのバージョン管理、管理、監視の基盤となるパッケージです。以下に、これらのタスクの一部を挙げます。
    • コレクション・フレームワーク:アプリケーション・データのストレージと処理を改善するように設計されたインターフェースの集合で構成される統合アーキテクチャーです。
    • 同時実行ユーティリティー:高性能スレッド・ユーティリティーを備えた強力なフレームワーク・パッケージです。
    • 設定API:同じマシン上の複数のユーザーが独自のアプリケーション設定グループを定義できるようにする、軽量でクロスプラットフォームの永続的なAPIです。
    • ロギング:セキュリティー障害、構成エラー、性能の問題などのログ・レポートを作成し、詳細な分析を行います。
    • Javaアーカイブ(JAR):プラットフォームに依存しないファイル形式で、複数のファイルをJARファイル形式でバンドルすることができ、ダウンロード速度の大幅な向上とファイルサイズの縮小を実現します。

Java開発キット(JDK)とは。

Java開発キット(JDK)は、JREのスーパーセットであるソフトウェア開発キットです。これは、JavaアプリケーションとJavaアプレットの開発を可能にする基本的なコンポーネントです。これはプラットフォーム固有であるため、オペレーティング・システムごと(Mac、Unix、Windowsなど)ごとに個別のインストーラーが必要です。

JavaにおけるJDKの役割

JDKには、Javaプラットフォームを使用して開発されたプログラムのコンパイル、デバッグ、実行に必要なすべてのツールが含まれています。(Javaプログラムはコマンドラインを使用して実行することもできることに注意してください。)

JDKコンポーネント

JDKには、Javaプログラムの実行に必要なすべてのJavaツール、実行可能ファイル、バイナリーが含まれています。これには、JRE、コンパイラ、デバッガー、アーカイブ、およびJava開発で使用されるその他のツールが含まれます。

Java SEとJava EEの比較

Javaは、Java Standard Edition(Java SE)またはCore Javaと同義です。3つの婉曲表現はすべて、型とオブジェクトを定義するという行為を含む基本的なJava仕様を指します。一方、Java EEはAPIを提供し、通常は大規模なアプリケーションの実行に使用されます。このブログの内容は、Java SEに焦点を当てています。

JVM、JRE、JDKの連携方法

まず、Javaの3つのコア・コンポーネントがどのように連携するかを確認し、その後、違いを調べてみましょう。次の図は、JVM、JRE、およびJDKがJavaランドスケープでどのように連携するかを示しています。

スライス・オープンなベース・ベースを想像するなら、ラウンド・クッション性のあるコア、コールとコットンの中間部分、カウ計画の外装という3つの主要コンポーネントが含まれています。これら3層すべてがなければ、ボールは意図した機能を実行できません。ベースの3つの基本部分と同様に、JVM、JRE、JDKにはすべて特定の機能があります。3つすべてがないと、Javaは正常に動作しません。

JVM、JRE、JDKの比較

次のビデオでは、Jamil Spain氏がJREとJDKの関係について詳しく説明しています。

JDK と JRE と JVM:主な違い

そしてその他の違いについて説明します

  • JDKは開発プラットフォームであり、JREは実行用です。
  • JVMはJavaプログラミング言語の基盤または中心であり、プログラムのJavaソースコードがプラットフォームに依存しないことを保証します。
  • JVMはJDKとJREの両方に含まれており、JavaプログラムはJVMがなければ実行されません。

補完的なテクノロジー

JVM、JRE、またはJDKを強化するために使用できる補完的なテクノロジーは数多くあります。最も頻繁に使用されるテクノロジーは、次のとおりです。

  • ジャスト・イン・タイム・コンパイラ(JIT)はJVMの一部であり、バイトコードからマシン・コードへの変換を最適化します。同様のバイトコードを選択して同時にコンパイルするため、バイトコードからマシン・コードのコンパイルまでの全体的な所要時間が短縮されます。
  • もうひとつの補完ツールであるJavacは、Javaの定義を読み込み、JVM上で実行可能なバイトコードに変換するコンパイラです。
  • Javadocは、APIドキュメンテーションをJavaソースコードからHTMLに変換します。これは、HTMLで標準のドキュメンテーションを作成する際に便利です。

JVMとコンテナ・テクノロジー

Java仮想マシン(JVM)は、ご想像のとおり、仮想マシン(VM)を作成するために使用されます。VMは、複数のアプリケーションが互いに影響を与えることなく、基盤となる同じ物理ハードウェア上で実行できるサーバーです。これにより、参考情報が有効に活用できるようになり、従来のインフラストラクチャーよりもはるかに簡単に拡張でき、コスト効率が高くなります。また、VMは独立性があるため、簡単に使い捨てすることができます。アプリケーションが不要になったら、仮想マシンを停止するだけで済みます。

コンテナはこの抽象化を次のレベルに引き上げ、OSカーネルを仮想化します。OSがないため、コンテナはVMよりもさらに軽量、高速、柔軟です。

Java、JVM、JDK、JDK、IBM®

多くの組織にとって、Javaは依然としてアプリケーション開発の重要な部分であり、ポータブルでスケーラブルなソリューションを作成する際に強固な基盤を提供します。また、クラウドにおけるアプリケーションのモダナイズにおいても重要な役割を果たすことができます。

次のステップとして、Javaアプリケーションの実装、監視、管理のための信頼性が高くコスト効率に優れた商用サポートを提供するOpenJDKとIBM® Runtimes for Businessを検討してください。

関連ソリューション
IBMのエンタープライズ向けJavaアプリケーション・サービス

Javaアプリケーションを開発および配信するためのフルマネージドのシングルテナント・サービス。

Javaアプリの詳細はこちら
DevOpsソリューション

DevOpsソフトウェアとツールを使用して、複数のデバイスや環境でクラウドネイティブ・アプリケーションを構築、デプロイ、管理します。

DevOpsソリューションの詳細はこちら
エンタープライズ・アプリケーション開発サービス

クラウド・アプリケーション開発は、一度構築すれば、迅速に反復し、どこにでもデプロイできます。

アプリケーション開発サービス
次のステップ

IBM Cloudアプリケーション開発コンサルティング・サービスは、クラウド戦略を合理化するための専門家のガイダンスと革新的なソリューションを提供します。IBMのクラウドおよび開発のエキスパートと提携して、アプリケーションをモダナイズ、拡張、高速化し、ビジネスに変革をもたらします。

アプリケーション開発サービスの詳細はこちら IBM Cloudを無料で構築開始