JDK vs JRE vs JVM:主な違い
JDK とは
JDK は、アプレットや Java アプリケーションの作成に使用されるソフトウェア開発環境です。 JDK の完全な形式は Java Development Kit です。 Java 開発者は、Windows、macOS、Solaris、および Linux で使用できます。 JDK は、Java プログラムのコーディングと実行を支援します。同じコンピューターに複数の JDK バージョンをインストールすることができます。
このチュートリアルでは、次のことを学びます:
- JDK とは?
- JRE とは?
- JVM とは?
- JDK を使用する理由
- JRE を使用する理由
- なぜ JVM なのか?
- JDK の機能
- JRE の機能
- JVM の機能
- JDK はどのように機能するか?
- JRE の機能
- JVM の機能
- JDK、JRE、JVM の違い
JRE とは
JRE は、他のソフトウェアを実行するように設計されたソフトウェアの一部です。これには、クラス ライブラリ、ローダー クラス、および JVM が含まれています。簡単に言えば、Java プログラムを実行するには JRE が必要です。プログラマーでない場合は、JDK をインストールする必要はありませんが、Java プログラムを実行するための JRE だけをインストールする必要があります。ただし、すべての JDK バージョンには Java ランタイム環境がバンドルされているため、PC に JRE を個別にダウンロードしてインストールする必要はありません。 JRE の完全な形式は Java ランタイム環境です。
JVM とは
JVM は、Java コードまたはアプリケーションを駆動するランタイム環境を提供するエンジンです。 Java バイトコードを機械語に変換します。 JVM は Java 実行環境 (JRE) の一部です。個別にダウンロードしてインストールすることはできません。 JVM をインストールするには、JRE をインストールする必要があります。 JVM の完全な形式は Java 仮想マシンです。
他の多くのプログラミング言語では、コンパイラは特定のシステム用のマシン コードを生成します。ただし、Java コンパイラは、JVM と呼ばれる仮想マシン用のコードを生成します。
主な違い
- JDK はソフトウェア開発キット、JRE は Java プログラムを実行できるソフトウェア バンドル、JVM はバイトコードを実行するための環境です。
- JDK の完全な形式は Java Development Kit であり、JRE の完全な形式は Java ランタイム環境であり、JVM の完全な形式は Java 仮想マシンです。
- JDK はプラットフォームに依存し、JRE もプラットフォームに依存しますが、JVM はプラットフォームに依存しません。
- JDK には開発、デバッグなどのためのツールが含まれています。JRE にはクラス ライブラリやその他のサポート ファイルが含まれていますが、JVM にはソフトウェア開発ツールは含まれていません。
- JDK にはインストーラーが付属しています。一方、JRE にはソース コードを実行するための環境しか含まれていませんが、JVM はソフトウェア JDK と JRE の両方にバンドルされています。
JDK を使用する理由
JDK を使用する重要な理由は次のとおりです。
- JDK には、Java プログラムを作成するために必要なツールと、それらを実行するための JRE が含まれています。
- コンパイラ、Java アプリケーション ランチャー、Appletviewer などが含まれます。
- コンパイラは、Java で記述されたコードをバイトコードに変換します。
- Java アプリケーション ランチャーは、JRE を開き、必要なクラスをロードして、メイン メソッドを実行します。
JRE を使用する理由
JRE を使用する重要な理由は次のとおりです。
- JRE には、クラス ライブラリ、JVM、およびその他のサポート ファイルが含まれています。デバッガー、コンパイラーなどの Java 開発用ツールは含まれていません。
- math、swingetc、util、lang、awt、ランタイム ライブラリなどの重要なパッケージ クラスを使用します。
- Java アプレットを実行する必要がある場合は、システムに JRE をインストールする必要があります。
JVM を選ぶ理由
JVM を使用する重要な理由は次のとおりです。
- JVM は、Java ソースコードを実行するプラットフォームに依存しない方法を提供します。
- 多数のライブラリ、ツール、フレームワークがあります。
- 一度 Java プログラムを実行すると、どのプラットフォームでも実行できるようになり、多くの時間を節約できます。
- JVM には、Java ソース コードを低レベルの機械語に変換する JIT (Just-in-Time) コンパイラが付属しています。したがって、通常のアプリケーションよりも高速に実行されます。
JDK の機能
はこちら JDK の重要な機能:
- 単一の catch ブロックで複数の拡張機能を処理できます。
- JDK には、JRE が持つすべての機能が含まれています。
- コンパイラ、デバッガなどの開発ツールが含まれています。
- JDK は、Java ソースコードを開発および実行するための環境を提供します。
- Windows、Unix、Mac オペレーティング システムにインストールできます。
- ダイアモンド演算子は、正確なインターフェイスを記述する代わりに、ジェネリック型インターフェイスを指定する際に使用できます。
JRE の機能
はこちら JRE の重要な機能:
- Java ランタイム環境は、JVM が実際に実行される一連のツールです。
- JRE には、Java Web Start や Java Plug-in などのデプロイメント テクノロジーが含まれています。
- 開発者は JRE のソース コードを簡単に実行できますが、Java プログラムを作成してコンパイルすることはできません。
- Java Database Connectivity (JDBC)、Remote Method Invocation (RMI)、Java Naming and Directory Interface (JNDI) などの統合ライブラリが含まれています。
- JRE には JVM と Java HotSpot 仮想マシン クライアントがあります
JVM の機能
JVM の重要な機能は次のとおりです。
- クラウド環境やデバイスでアプリケーションを実行できる
- Java 仮想マシンは、バイトコードをマシン固有のコードに変換します。
- メモリ管理、セキュリティ、ガベージ コレクションなどの基本的な Java 機能を提供します。
- JVM は、Java ランタイム環境によって提供されるライブラリとファイルを使用してプログラムを実行します。
- JDK と JRE の両方に Java 仮想マシンが含まれています。
- Java プログラムを 1 行ずつ実行できるため、インタープリターとも呼ばれます。
- JVM は簡単にカスタマイズできます。たとえば、最小メモリと最大メモリを割り当てることができます。
- ハードウェアやオペレーティング システムから独立しています。したがって、一度 Java プログラムを作成すれば、どこでも実行できます。
JDK の仕組み
<センター>
<図> フィギュア>センター>
JDK の重要なコンポーネントは次のとおりです。
- JDK と JRE :JDK を使用すると、プログラマーは、JVM とクラス ライブラリを含む JRE で実行できるコア Java プログラムを作成できます。
- クラス ライブラリ: これは、Java プログラムが実行時に呼び出すことができる、動的にロード可能なライブラリのグループです。
- コンパイラ: 開発者のテキストファイルを受け取り、Java クラスファイルにコンパイルする Java プログラムです。これは、Java バイト コードを含む、コンパイラによって提供される出力の一般的な形式です。 Java では、主要なコンパイラは Javac です。
- デバッガ: デバッガは、開発者が Java プログラムをテストおよびデバッグできるようにする Java プログラムです。
- JavaDoc: JavaDoc は、Sun Microsystems が作成した Java のドキュメントです。 JavaDoc を使用して、ソース プログラムから HTML ファイルで API ドキュメントを生成できます
JRE の仕組み
<センター>
<図> フィギュア>センター>
JRE には、JRE、ライブラリ クラス、および開発ツールを備えた JVM のインスタンスがあります。 Java コードを記述してコンパイルすると、コンパイラはバイト コードを含むクラス ファイルを生成します。
JRE の重要なコンポーネントは次のとおりです。
- クラス ローダー: クラスローダーは、Java プログラムの実行に必要なさまざまなクラスをロードします。 JVM は、ブートストラップ クラス ローダー、拡張機能クラス ローダー、システム クラス ローダーと呼ばれる 3 つのクラス ローダーを使用します。
- バイトコード検証: バイトコード検証ツールは、コードがインタープリターを妨害しないようにバイトコードを検証します。
- 通訳: クラスが読み込まれ、コードが検証されると、インタープリターはコードを 1 行ずつ読み取ります。
- ランタイム: ランタイムは、特定のプログラムが実行されている期間を表すために、主にプログラミングで使用されるシステムです。
- ハードウェア: Java ネイティブ コードをコンパイルすると、特定のハードウェア プラットフォームで実行されます。
このようにして、Java プログラムは JRE で実行されます。
JVM の仕組み
<センター>
<図> フィギュア>センター>
JVM の重要なコンポーネントは次のとおりです。
1) クラスローダー
クラスローダーは、クラスファイルをロードするために使用されるサブシステムです。 3 つの主要な機能を実行します。読み込み、リンク、および初期化。
2) メソッド エリア
JVM メソッド領域には、メタデータ、Java メソッドのコード、定数ランタイム プールなどのクラスの構造が格納されます。
3) ヒープ
すべてのオブジェクト、配列、およびインスタンス変数はヒープに格納されます。このメモリは複数のスレッドで共有されます。
4) JVM 言語スタック
Java 言語スタックには、ローカル変数とその部分的な結果が格納されます。すべてのスレッドには、スレッドの作成と同時に作成される独自の JVM 言語スタックがあります。メソッドが呼び出されると新しいフレームが作成され、メソッド呼び出しプロセスが完了すると削除されます。
5) PC レジスター
PC レジスタには、現在実行中の Java 仮想マシン命令のアドレスが格納されます。 Java では、各スレッドに個別の PC レジスタがあります。
6) ネイティブ メソッド スタック
ネイティブ メソッド スタックは、ネイティブ ライブラリに依存するネイティブ コードの命令を保持します。ネイティブ ヒープにメモリを割り当てるか、任意のタイプのスタックを使用します。
7) 実行エンジン
これは、ソフトウェア、ハードウェア、または完全なシステムをテストするために使用されるソフトウェアの一種です。テスト実行エンジンは、テストされた製品に関する情報を持ちません。
8) ネイティブ メソッド インターフェイス
Native Method Interface はプログラミング フレームワークです。これにより、JVM で実行されている Java コードをライブラリやネイティブ アプリケーションから呼び出すことができます。
9) ネイティブ メソッド ライブラリ
ネイティブ ライブラリは、実行エンジンに必要なネイティブ ライブラリ (C、C++) のコレクションです。
JDK、JRE、JVM の違い
JDK と JRE と JVM の主な違いは次のとおりです:
JDK | JRE | JVM |
---|---|---|
JDK の完全な形式は Java Development Kit です。 | JRE の完全な形式は Java ランタイム環境です。 | JVM の完全な形式は Java 仮想マシンです。 |
JDK は、Java でアプリケーションを開発するためのソフトウェア開発キットです。 | Java コードを実行するために必要なコンポーネントを Java クラス ライブラリに提供するソフトウェア バンドルです。 | JVM は Java バイト コードを実行し、それを実行するための環境を提供します。 |
JDK はプラットフォームに依存します。 | JRE もプラットフォームに依存します。 | JVM はプラットフォームに大きく依存します。 |
Java コードを開発、デバッグ、および監視するためのツールが含まれています。 | JVM がプログラムを実行するために必要なクラス ライブラリとその他のサポート ファイルが含まれています。 | JVM にはソフトウェア開発ツールは含まれていません。 |
JRE のスーパーセットです | JDK のサブセットです。 | JVM は JRE のサブセットです。 |
JDK を使用すると、開発者は、JRE および JVM で実行および実行できる Java プログラムを作成できます。 | JRE は、JVM を作成する Java の一部です。 | ソース コードを実行するのは Java プラットフォーム コンポーネントです。 |
JDK にはインストーラーが付属しています。 | JRE には、ソース コードを実行するための環境のみが含まれています。 | ソフトウェア JDK と JRE の両方に JVM がバンドルされています。 |
Java