JDKとJREの違いは何ですか?


回答:


1223

JREがあるのJava Runtime Environment。これは、Java仮想マシン(JVM)、Javaクラスライブラリ、javaコマンド、およびその他のインフラストラクチャを含む、コンパイル済みJavaプログラムを実行するために必要なすべてのパッケージです。ただし、新しいプログラムの作成には使用できません。

JDKはあるのJava Development Kit、Java用のフル機能のSDK。これには、JREのすべてが含まれていますが、コンパイラ(javac)およびツール(javadocおよびのようなjdb)も含まれています。プログラムの作成とコンパイルが可能です。

通常、コンピュータでJavaプログラムを実行することだけに関心がある場合は、JREのみをインストールします。必要なのはそれだけです。一方、Javaプログラミングを計画している場合は、代わりにJDKをインストールする必要があります。

コンピューターでJava開発を行う予定がない場合でも、JDKをインストールする必要がある場合があります。たとえば、JSPを使用してWebアプリケーションを配備する場合、技術的にはアプリケーションサーバー内でJavaプログラムを実行しているだけです。では、なぜJDKが必要なのでしょうか。アプリケーションサーバーはJSPをJavaサーブレットに変換し、JDKを使用してサーブレットをコンパイルする必要があるためです。もっと例があると思います。


4
次に、外部jarを使用している場合、それらのjarをjre / lib / ext /にデプロイします。それで、なぜですか?
i2ijeya

2
特にJavaの拡張として意図されたいくつかのjarがあります。それらはlib / extに配置でき、配置する必要があります。ただし、古いアプリケーションのjarファイルを配置することは、このディレクトリの目的ではありません。これは拡張メカニズムの乱用であり、後で問題が発生する可能性があります。
Carl Smotricz、2009

私はJExcel APIで作業し、クラスパスを正しく設定しましたが、それでも問題が解決しません。だから私はそれをtlib / extフォルダーの中にデプロイしました、その後は問題ありませんか?それでは理由は何でしょうか?
i2ijeya 2009

3
完全に確認できる情報はありませんが、クラスパスを実際に正しく設定しなかったか、コードを使用してしまったクラスローダーとは異なるクラスローダーにクラスパスを設定したと思われます。lib / extがクラスパス拡張と異なる点は、lib / extがその特定のJREを使用するすべての Javaアプリに影響を与えることです。クラスパスを設定するよりも簡単です。
Carl Smotricz、2009

数週間前、かなり大きな障害が発生しました。これは、JAVA_HOMEおよびPath環境変数を変更して、JDKではなくJREを参照することで修正されました。どのような場合にアプリはJREを使用して機能し、JDKで失敗しますか?新しい質問を開くべきだと思います。興味深い点は、バージョン1.6以降、JREはJDKインストールに含まれていますが、バージョン1.5以前ではJREフォルダーがJDK内にあるのに対して、JDKフォルダーと同じレベルで解凍されます。ところで:良い答えです!
Jesse Ivy

143

上記の答え(Pabloによる)は非常に正しいです。これは単なる追加情報です。

JREは、名前が暗示するように、ある環境を。これは基本的に、Java関連のファイルを含む一連のディレクトリです。

  • bin/Javaの実行可能プログラムが含まれています。最も重要なのはjava(そしてWindowsの場合javawも)、JVMを起動することです。いくつかの他のユーティリティは、次のような、ここにもありますkeytoolし、policytool
  • conf/ Javaエキスパートが操作できるユーザー編集可能な構成ファイルを保持します。
  • lib/いくつか.jarの、設定ファイル、プロパティファイル、フォント、翻訳、証明書など、Javaのすべての「トリミング」をサポートする多数のファイルがあります。最も重要なのはmodules.classJava標準ライブラリのファイルを含むファイルです。
  • 特定のレベルでは、Java標準ライブラリはネイティブコードを呼び出す必要があります。この目的のために、JREには、サポートされているシステム固有のネイティブバイナリコードの下またはそれと一緒に、いくつかの.dll(Windows)または.dylib(macOS)または.so(Linux)ファイルが含まれています。bin/lib/

JDKはまた、ディレクトリのセットです。これはJREのスーパーセットであり、いくつか追加されています。

  • bin/開発ツールで拡大されました。それらの中で最も重要なのはjavac; 他の人が含まれjarjavadocそしてjshell
  • jmods/標準ライブラリのJMODファイルを保持するが追加されました。これらのファイルにより、標準ライブラリをで使用できますjlink

1
これは、パス変数をJDKに設定できることを意味しますか?
Brady

3
@Brady:はい、そう思います。少なくとも、それは私にはうまくいきます。開発者として、私は基本的にJREを無視します。特にJREが必要な特別なケースがある場合、私はそれらを認識していません。
Carl Smotricz、2014

JREはコンパイルされたJavaコードでのみ機能しますよね?
SexyBeast 2014年

2
@ Cupidvogel、JREにはコンパイラがないので、私はあなたがそれを言うことができると思います。JREは、(コンパイルされた)Javaコードを実行するためにありますが、JDKは、それを開発するためのツールも提供します。
Carl Smotricz、2014年

1
つまり、基本的にJDKには、コードをコンパイルするためのコンパイラ(Javacなど)、コンパイルされたコードを実行するためのJRE(ランタイムシステム)、および開発者が開発を容易かつ正確に行えるようにするための他のツールが含まれています。したがって、AFAIU、JavacとJREだけが、ここで本当に必要なツールです。では、なぜソフトウェアのインストールやアップグレードがJDKの存在を主張するのでしょうか。
SexyBeast 2014年

131

ここに画像の説明を入力してください

JDKはJREのスーパーセットであり、JREにあるすべてのものに加えて、アプレットやアプリケーションの開発に必要なコンパイラやデバッガなどのツールが含まれています。JREは、Javaプログラミング言語で記述されたアプレットおよびアプリケーションを実行するためのライブラリ、Java仮想マシン(JVM)、およびその他のコンポーネントを提供します。


3
クールな図!javaコマンドが正しくないJREの外に描かれていることを少し混乱しています。JDKがインストールされているときに、少なくとも同じサイズのjavaコマンド用の個別のファイルがある理由がわかりません。どのような場合にアプリはJREを使用して機能し、JDKで失敗しますか?最近これを経験し、おそらくそれを複製してその底に到達するために後戻りする必要があります...
Jesse Ivy

104

簡単に言えば、JDKは祖父ですJREは父親であり、JVMは彼らの息子です。 [JDK> JRE> JVM]

JDK = JRE +開発/デバッグツール

JRE = JVM + Javaパッケージクラス(util、math、lang、awt、swingなど)+ランタイムライブラリ。

JVM =クラスローダーシステム+ランタイムデータ領域+実行エンジン。

つまり、Javaプログラマーの場合、システムにJDKが必要であり、このパッケージにはJREとJVMも含まれますが、オンラインゲームをプレイしたい通常のユーザーであれば、JREのみが必要で、このパッケージには含まれません。その中のJDK。

JVM:

Java仮想マシン(JVM)は、 Javaバイトコードを実行する仮想マシンです。JVMはJavaソースコードを理解しません。そのため、*。javaファイルをコンパイルして、JVMが理解できるバイトコードを含む* .classファイルを取得します。また、Javaを「移植可能な言語」にするためのエンティティでもあります(1回の書き込みでどこでも実行できます)。実際、さまざまなシステム(Windows、Linux、MacOS、ウィキペディアのリストを参照してください)用にJVMの特定の実装があります。目的は、同じバイトコードですべて同じ結果が得られることです。

JDKおよびJRE

JDKとJREの違いを説明するには、Oracleのドキュメントを読んで図を参照するのが最善です。

Javaランタイム環境(JRE)

Javaランタイム環境(JRE) Javaプログラミング言語で書かれたアプレットやアプリケーションを実行するためのライブラリ、Java仮想マシン、およびその他のコンポーネントを提供します。さらに、JREには2つの主要な配備技術が含まれています。JavaPlug-inは、アプレットを一般的なブラウザで実行できるようにします。スタンドアロンのアプリケーションをネットワーク経由でデプロイするJava Web Start。また、エンタープライズソフトウェアの開発と配備のためのJava 2 Platform、Enterprise Edition(J2EE)のテクノロジーの基盤でもあります。JREには、アプレットやアプリケーションを開発するためのコンパイラやデバッガなどのツールやユーティリティは含まれていません。

Java開発キット(JDK)

JDKはJREのスーパーセットであり、JREに含まれるすべてのものに加えて、アプレットやアプリケーションの開発に必要なコンパイラやデバッガなどのツールが含まれています。

JDKを提供するのはOracleだけではないことに注意してください。

JITコンパイルプロセス(提供:Oracleのドキュメント)

JDK> JRE> JVM


「コンパイル」または「コンパイラ」と言う場合、このコンテキストでは、JavaソースコードをJavaバイトコードに変換するか、Javaバイトコードをマシンコードに変換するかについて、非常に混乱します。
OrangeSherbet

いいね!私は祖父、父と息子の類推が好きです。:D
Emzor

ええありがとう、これらの用語にあまり詳しくない人を理解するのはとても簡単です。
Jaimin Patel

25

公式Javaウェブサイトから...

JRE(Javaランタイム環境):

  • これは、Javaプログラムを実際に実行するJava仮想マシン*の実装です。
  • Javaランタイム環境は、Javaプログラムを実行するために必要なプラグインです。
  • JREはJDKよりも小さいので、必要なディスク容量は少なくなります。
  • JREは、https://www.java.comから自由にダウンロード/サポートでき ます。
  • これには、Javaで記述されたアプリケーションやアプレットを実行するためのJVM、コアライブラリ、その他の追加コンポーネントが含まれています。

JDK(Java開発キット)

  • これは、Javaベースのアプリケーションの開発に使用できるソフトウェアのバンドルです。
  • Java開発キットは、Javaアプリケーションの開発に必要です。
  • JDKには、JREとさまざまな開発ツールが含まれているため、より多くのディスク領域が必要です。
  • JDKは、https://www.oracle.com/technetwork/java/javase/downloads/から無料でダウンロード/サポートでき ます。
  • これには、JRE、APIクラスのセット、Javaコンパイラ、Webstart、およびJavaアプレットとアプリケーションの作成に必要な追加ファイルが含まれます。

23

デバッグの観点からの1つの違い:

StringやArrayListなどのJavaシステムクラスにデバッグするには、「デバッグ情報」でコンパイルされたJREの特別なバージョンが必要です。JDKに含まれているJREはこの情報を提供しますが、通常のJREは提供しません。通常のJREには、パフォーマンスを向上させるためにこの情報は含まれていません。

デバッグ情報とは何ですか?このブログ投稿からの簡単な説明は次のとおりです。

最新のコンパイラーは、高レベルのコードをうまくインデントして入れ子にした制​​御構造と任意に型付けされた変数をマシンコード(Javaの場合はバイトコード)と呼ばれる大きなビットの山に変換しますが、その唯一の目的はターゲットCPU(JVMの仮想CPU)で可能な限り高速に実行する。Javaコードは、いくつかのマシンコード命令に変換されます。変数は、スタック、レジスター、または完全に最適化された場所全体に押し出されます。構造体とオブジェクトは、結果のコードには存在しません。これらは、ハードコードされたオフセットからメモリバッファーに変換される単なる抽象化です。

では、デバッガーは、関数の入り口でブレークするように要求したときに、どこで停止するかをどのようにして知るのでしょうか。変数の値を要求するときに、何を表示するかをどのようにして見つけますか?答えは–デバッグ情報です。

デバッグ情報は、マシンコードとともにコンパイラによって生成されます。これは、実行可能プログラムと元のソースコードとの関係を表しています。この情報は、事前定義された形式にエンコードされ、マシンコードと一緒に保存されます。そのようなフォーマットの多くは、さまざまなプラットフォームと実行可能ファイルのために長年にわたって発明されました。


9

JVM、JRE、JDK-これらはすべてJava言語のバックボーンです。各コンポーネントは個別に動作します。JDKとJREは物理的に存在しますが、JVMは抽象的なマシンであるため、物理的に存在しません。

JVMは、「バイトコード」と呼ばれる中間コードをチェックするために使用されるJDKおよびJREのサブシステムです。まず、Javaコンパイラー(javac)によって生成された「クラスファイル」(拡張子は.c)を、JVMサブシステムクラスローダーと分類されたメモリーの場所(クラス領域、スタック、ヒープ、PCレジスター)を介してロードします。次に、すべてのバイトコードをチェックして、Javaで返されることと、ネットワークによるすべてのメモリアクセスがアクセスできることを確認します。その後、インタプリタの作業が始まり、プログラム全体が1行ずつチェックされます。結果は、ランタイム機能を備えたJRE(Javaランタイム環境)を介して、最終的にコンソール/ブラウザー/アプリケーションに表示されます。

JREは、JVM、クラス、.jarファイルなどの実行可能ファイルなどのランタイム機能を提供するJDKのサブシステムでもあります。

JDKはJava Development Kitの略です。クラス、メソッド、swing、AWT、パッケージ、Java(インタープリター)、javac(コンパイラー)、appletviewer(アプレットアプリケーションビューアー)など、Javaプログラミングで必要なすべてのコンポーネントが含まれています。結論として、開発に必要なすべてのファイルが含まれていますスタンドアロンまたはWebベースのアプリケーション。


8

JRE

JREは、Javaランタイム環境の頭字語です。ランタイム環境を提供するために使用されます。JREは、JVMの実装です。物理的に存在します。ライブラリのセットと、JVMが実行時に使用するその他のファイルが含まれます。

JDK

JDKはJava Development Kitの頭字語で、物理的に存在します。JRE+開発ツールが含まれています。

リンク:-http: //www.javatpoint.com/difference-between-jdk-jre-and-jvm

通常、ブラウザーまたはコンピューターでJavaプログラムを実行することだけに関心がある場合は、JREのみをインストールします。必要なのはそれだけです。一方、Javaプログラミングを計画している場合は、JDKも必要です。


8

各OSの構成が異なるため、JVM、JRE、およびJDKはプラットフォームに依存します。ただし、Javaはプラットフォームに依存しません。

Java仮想マシン(JVM)は、Javaバイトコードを実行するランタイムシステムです。

JREは、Javaアプリケーションの実行に必要な環境(標準ライブラリおよびJVM)です。

JDKには、JREに加えて、アプレットやアプリケーションの開発に必要または有用なコンパイラやデバッガなどのコマンドライン開発ツールが含まれています。


7

これは、Oracle http://docs.oracle.com/javase/7/docs/technotes/guides/からの直接の簡単な応答です。

Java SEランタイム環境(JRE)

JREは、Javaプログラミング言語で記述されたアプレットおよびアプリケーションを実行するために必要なライブラリ、Java仮想マシン、およびその他のコンポーネントを提供します。このランタイム環境は、アプリケーションと一緒に再配布して、自立させることができます。

Java SE開発キット(JDK)

JDKには、JREに加えて、アプレットやアプリケーションの開発に必要または有用なコンパイラやデバッガなどのコマンドライン開発ツールが含まれています。


7

Javaプログラムを実行したいが開発はしたくない場合は、Javaランタイム環境(JRE)をダウンロードしてください。それらを開発したい場合は、Java開発キットまたはJDKをダウンロードしてください。

JDK

JDKをキットと呼びましょう。これには、Javaアプリケーションの開発と実行に必要なものが含まれています。

JDKは、アプリケーション、コンポーネント、アプレットを構築するための開発環境として提供されます。

JRE

コンパイルされた形式でJavaアプリケーションを実行するために必要なすべてが含まれています。ライブラリやその他のものは必要ありません。必要なものはすべてコンパイルされています。

JREは開発には使用できず、アプリケーションの実行にのみ使用されます。


6

JVM(Java Virtual Machine)は抽象的なマシンです。Javaバイトコードを実行できるランタイム環境を提供する仕様です。

JREは、Javaランタイム環境の頭字語です。ランタイム環境を提供するために使用されます。JREは、JVMの実装です。物理的に存在します。ライブラリのセットと、JVMが実行時に使用するその他のファイルが含まれています

JDKはJava Development Kitの頭字語で、物理的に存在します。JRE+開発ツールが含まれています


6

あなたがいる場合はJavaプログラマあなたが必要となるJDKをお使いのシステムにして、このパッケージは、同様にJREおよびJVMが含まれますが、あなたがしている場合は、通常のユーザーはオンラインゲームをプレイしたい、あなただけが必要になりますJREをして、このパッケージには、それにJDKを持っていません。 。

JVM

JVM(Java Virtual Machine)は抽象的なマシンです。Javaバイトコードを実行できるランタイム環境を提供する仕様です。

JVMは、多くのハードウェアおよびソフトウェアプラットフォームで使用できます。各OSの構成が異なるため、JVM、JRE、およびJDKはプラットフォームに依存します。ただし、Javaはプラットフォームに依存しません。

JRE

コンパイルされた形式でJavaアプリケーションを実行するために必要なすべてが含まれています。ライブラリやその他のものは必要ありません。必要なものはすべてコンパイルされています。

JREは開発には使用できず、アプリケーションの実行にのみ使用されます。

Java SE開発キット(JDK)

JDKには、JREに加えて、アプレットやアプリケーションの開発に必要または有用なコンパイラやデバッガなどのコマンドライン開発ツールが含まれています。

(出典:GeeksForGeeks Q&AJavaプラットフォームの概要


複数のサイトからの盗用がありました(JVMおよびJDKセクションの場合)。次回は、出典を明記してください。これはオリジナルの作品ではありません。
Jonathan Lam

6

これらの用語(JVM、JDK、JRE)を明確に理解することは、それらの使用法と違いを理解するために不可欠です。

JVM Java仮想マシン(JVM)は、Javaバイトコードを実行するランタイムシステムです。JVMは、一連のコンパイルされた命令を実行し、メモリ位置を操作できる仮想コンピュータのようなものです。Javaコンパイラがソースコードをコンパイルすると、バイトコードと呼ばれる高度に最適化された命令セットが.classファイルに生成されます。JVMはこれらのバイトコード命令を解釈し、実行のためにマシン固有のコードに変換します。

JDK Java開発キット(JDK)は、Javaアプリケーションの開発と実行に使用できるソフトウェア開発環境です。JREと、Javaコンパイラ、インタープリタ、アプレットビューア、ドキュメントビューアなどのプログラミングツールセットが含まれています。JDKは、Java SE、Java EE、またはJava MEプラットフォームを介して実装されます。

JRE Javaランタイム環境(JRE)は、JVM、コアクラス、およびアプリケーション開発をサポートするいくつかのライブラリを含むJDKの一部です。JREはJDKの一部として入手できますが、個別にダウンロードして使用することもできます。

完全な理解のために私のブログを見ることができます:Jdk Jre Jvmと違い


5

jdkは、コードにコンパイルしてJavaコードをバイトコードに変換するために必要ですが、jreはバイトコードを実行するために必要です。


5
@Noy:情報が非常に少ないだけでなく、他の回答に含まれていない情報も含まれていません。
Amos M. Carpenter

5

JDKには、JREに加えて、アプレットやアプリケーションの開発に必要または有用なコンパイラやデバッガなどのコマンドライン開発ツールが含まれています。

JREは基本的に、Javaプログラムが実行されるJava仮想マシンです。アプレットを実行するためのブラウザプラグインも含まれています。

JDKは抽象的なマシンです。Javaバイトコードを実行できるランタイム環境を提供する仕様です。

つまり、@ Jaimin Patelによると、基本的にはJVM <JRE <JDKです。


5

単に:

JVMは、Javaコードが実行される仮想マシンです。

JREは、Javaアプリケーションの実行に必要な環境(標準ライブラリおよびJVM)です。

JDKは、開発者ツールとドキュメントを備えたJREです。


4

JDKとJREの違いは、JDKはJavaのソフトウェア開発キットであり、JREはプログラムを実行する場所であることです。


4

もしあなたが開発者なら、あなたの役割はプログラムを開発することとプログラムを実行することです。したがって、JDKが提供する開発と実行のための環境が必要です。

クライアントであれば、開発について心配する必要はありません。必要なのは、JREによって提供される、プログラムを実行して結果のみを取得する環境です。

JREはアプリケーションを実行しますが、JVMは命令を1行ずつ読み取るため、インタプリタです。

JDK = JRE +開発ツール

JRE = JVM + Libraryクラス


2

JRE

JREはJavaランタイム環境の頭字語です。ランタイム環境を提供するために使用されます。JREの実装です。物理的に存在します。ライブラリのセットと、JVMが実行時に使用するその他のファイルが含まれています。

JVMの実装は、Sun Micro Systems以外の会社からも積極的にリリースされています。

ここに画像の説明を入力してください

JDK

JDKはJava Development Kitの頭字語で、物理的に存在します。JRE+開発ツールが含まれています。

ここに画像の説明を入力してください


テキストとグラフィックスの両方の情報は、以前の他の回答で提供されています。
カールリヒター
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.