jdk と jre の違い
1. 定義
JRE (Java ランタイム環境) ) Javaの実行環境です。開発者ではなく、Java プログラムのユーザーを対象としています。 JRE をダウンロードしてインストールしただけの場合、システムは Java プログラムのみを実行できます。 JRE は、JVM 標準実装や Java コア クラス ライブラリなど、Java プログラムを実行するために必要な環境の集合です。これには、Java 仮想マシン、Java プラットフォームのコア クラス、およびサポート ファイルが含まれます。開発ツール (コンパイラー、デバッガーなど) は含まれません。
JDK (Java Development Kit) は、J2SDK (Java2 Software Development Kit) とも呼ばれ、Java 開発ツール キットです。これは、Java 開発環境 (クラスの Java ファイルをコンパイルするためのコンパイラ javac およびその他のツールを提供します) を提供します。ファイル)と実行環境(クラス ファイルを解析して実行するための JVM およびランタイム補助パッケージを提供)。 JDK をダウンロードしてインストールすると、Java プログラムを開発できるだけでなく、Java プログラムを実行するプラットフォームも手に入れることができます。 JDK は、Java ランタイム環境 (JRE)、一連の Java ツール tools.jar、および Java 標準クラス ライブラリ (rt.jar) を含む Java 全体の中核です。
推奨事項: "java 学習"
2. 違い
JRE には主に次のものが含まれます: Java クラスのクラス ファイルライブラリ (すべて lib ディレクトリの jar にパッケージ化されています) および仮想マシン (jvm.dll); JDK には主に以下が含まれます: Java クラス ライブラリのクラス ファイル (すべて lib ディレクトリの jar にパッケージ化されています) および JRE が付属しています。では、なぜ JDK には JRE が付属しているのでしょうか?さらに、jdk/jre/bin の下のクライアント フォルダーとサーバー フォルダーの両方に jvm.dll が含まれています (JDK に付属の JRE に 2 つの仮想マシンがあることを示します)。
環境変数パスに jdk/bin パスを設定することを忘れないでください?先生は、javac と java が設定されていないと使用できないことを全員に伝えます。確かに、jdk/bin ディレクトリにはすべてのコマンドが含まれています。しかし、私たちが使用する Java コマンドが jdk/bin ディレクトリではなく jre/bin ディレクトリにあると考えたことがある人はいるでしょうか?信じられないなら、実験してみてください。jdk/bin ディレクトリの java.exe を別の場所に切り取って、Java プログラムを実行してください。何がわかりましたか?全て大丈夫! (JRE には javac コマンドがありません。理由は簡単です。開発環境ではありません) それで、誰かが尋ねますか? jre/bin ディレクトリを環境変数に設定していないのは明らかですか?想像してみてください。ほとんどの人が Java を使用する場合、開発には jdk は必要ありません。Java プログラムを実行するために jre だけが必要です。では、各顧客が手動で環境変数を設定するのはどれほど面倒でしょうか? jre をインストールすると、インストール プログラムによって jre の java.exe がシステム変数に自動的に追加されます。検証方法は非常に簡単です。Windows/system32 に移動して調べてください。何が見つかりましたか? java.exeがあります。
3. 難易度
JDK がインストールされている場合、コンピューターには 2 つの JRE セット (JRE 自体と JDK 内の JRE) が存在します。最初のセットのサーバー側 Java の数は、後者のセットの仮想マシン。
(1)なぜ Sun は JDK に同じ JRE の 2 セットをインストールすることを要求しているのですか?これは、JDK には Java で書かれた開発ツール (javac.exe、jar.exe など) が多数あり、それらはすべて /lib/tools.jar に配置されるためです。 tools.jar の名前を tools1.jar に変更して javac.exe を実行すると、次の結果が表示されます。スレッド "main" java.lang.NoClassDefFoundError での例外: com/sun/tools/javac/Main。つまり、javac.exe と入力し、java -cp c:/jdk/lib/tools.jar com.sun.tools.javac.Main と入力すると、同じ結果が得られます。ここから、javac.exe は単なるラッパー (Wrapper) であり、これを作成する目的は、開発者が長すぎるコマンドを入力するのを避けることであることが証明できます。 /lib ディレクトリ内のプログラムは非常に小さく、29K 以下であることがわかります。ここから結論を導き出すことができます。つまり、JDK 内のほとんどのツールは Java で書かれているため、それらも Java アプリケーションになります。そのため、JDK 付属のツールを使用して Java プログラムを開発したい場合は、JRE のセットも自分で付属する必要があります。そのため、JDK ディレクトリ JRE にあるセットは、一般的な Java プログラムを実行するために使用されます。
(2) コンピューターに 3 セット以上の JRE がインストールされている場合、誰が決定しますか?この重要なタスクは java.exe にあります。 java.exe の役割は、Java プログラムを実行するための適切な JRE を見つけることです。 java.exe は次の順序で JRE を検索します: 1) 独自のディレクトリに JRE があるかどうか; 2) 親ディレクトリに JRE があるかどうか; 3) レジストリをクエリします: [HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Runtime Environment] 。したがって、java.exe の実行結果は、コンピュータでどの JRE が実行されるかに大きく関係します。
(3) JDK-->JRE-->Bin ディレクトリには、server と client という 2 つのフォルダがあり、実際の jvm.dll はここにあります。 jvm.dll は単独では動作できません。jvm.dll が開始されると、明示的なメソッド (つまり、Win32 API の LoadLibrary() と GetProcAddress() を使用して補助ダイナミック リンク ライブラリをロードします) が使用され、これらの補助ダイナミック リンクはライブラリ ダイナミック リンク ライブラリ (.dll) は、jvm.dll が配置されているディレクトリの親ディレクトリに配置されている必要があります。したがって、どの JVM を使用するかについては、JRE が配置されているディレクトリ内の jvm.dll を指すように PATH を設定するだけで済みます。
4. 最も主流の JDK は Sun がリリースした JDK であり、Sun 以外にも、IBM が開発した JDK、BEA が開発した Jrocket、There など、独自の JDK を開発している企業や組織が数多くあります。 GNU 組織などによって開発された JDK です。
以上がjdkとjreの違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。