_ jvm _ 、 _ jdk _ 、 _ jre _ & OpenJDK の違いは何ですか?
私はJavaでプログラミングしていましたが、これらのフレーズに遭遇しました。それらの違いは何ですか?
Java仮想マシン(JVM)は、Javaバイトコードを実行する仮想マシンです。 JVMはJavaソースコードを理解しません。そのため、*.Java
ファイルをコンパイルして、JVMが理解するバイトコードを含む*.class
ファイルを取得する必要があります。また、Javaを「ポータブル言語」(一度書き込み、どこでも実行可能)にできるエンティティでもあります。確かに、異なるシステム(Windows、Linux、macOS、 Wikipediaリストを参照 )向けのJVMの特定の実装があります。目的は、同じバイトコードですべて同じ結果が得られるようにすることです。
JDKとJREの違いを説明するには、 Oracleドキュメント を読み、図を参照するのが最善です。
Java Runtime Environment(JRE)
Java Runtime Environment(JRE)は、Javaプログラミング言語で記述されたアプレットおよびアプリケーションを実行するためのライブラリ、Java仮想マシン、およびその他のコンポーネントを提供します。さらに、2つの主要なデプロイメントテクノロジーがJREの一部です。Javaプラグイン。アプレットを一般的なブラウザーで実行できます。 Java Web Start。ネットワーク経由でスタンドアロンアプリケーションを展開します。また、エンタープライズソフトウェアの開発と展開のためのJava 2 Platform、Enterprise Edition(J2EE)のテクノロジーの基盤でもあります。 JREには、アプレットやアプリケーションを開発するためのコンパイラやデバッガなどのツールやユーティリティは含まれていません。
Java Development Kit(JDK)
JDKはJREのスーパーセットであり、JREにあるすべてのものに加えて、アプレットやアプリケーションの開発に必要なコンパイラーやデバッガーなどのツールが含まれています。
JDKを提供するのはOracleだけではないことに注意してください。
OpenJDKは、JDKのオープンソース実装であり、Oracle JDKのベースです。 Oracle JDKとOpenJDKにはほとんど違いはありません。
違いは、この中に記載されています ブログ :
Q:OpenJDKリポジトリにあるソースコードと、Oracle JDKのビルドに使用するコードの違いは何ですか?
A:非常に近い-Oracle JDKリリースのビルドプロセスは、OracleのJavaプラグインとJava WebStart、グラフィックラスタライザーなどの一部のクローズドソースサードパーティコンポーネント、Rhinoなどの一部のオープンソースサードパーティコンポーネント、および追加のドキュメントやサードパーティのフォントなどのあちこちの断片。今後は、JRockit Mission Control(Oracle JDKではまだ利用できません)などの商用機能と見なされるものを除き、Oracle JDKのすべての部分をオープンソース化し、障害のあるサードパーティコンポーネントをオープンソースの代替物に置き換えて、より近いパリティを実現することを目指していますコードベース間。
JDK 11の更新-ドナルドスミスの記事は、Oracle JDKとOracleのOpenJDKの違いを明確にしようとしています: https://blogs.Oracle.com/Java-platform-group/Oracle-jdk-releases-for- Java-11以降
JVMはJava仮想マシンです - 実際にはJava ByteCodeを実行します。
JREはJava Runtime Environmentです。JVMはJVMなどを含み、Javaプログラムを実行するために必要なものです。
JDKはJava Development Kitです - それはJREですが、javac(これはJavaソースコードをコンパイルするために必要なものです)と他のプログラミングツールを追加したものです。
OpenJDKは特定のJDK実装です。
JDK(Java開発キット)
Java Developer Kitには、Javaプログラムの開発に必要なツール、およびプログラムを実行するためのJREが含まれています。ツールには、コンパイラ(javac.exe)、Javaアプリケーションランチャー(Java.exe)、Appletviewerなどがあります。
コンパイラはJavaコードをバイトコードに変換します。 JavaアプリケーションランチャーはJREを開き、クラスをロードし、そのメインメソッドを呼び出します。
あなた自身のプログラムを書いてコンパイルするためには、JDKが必要です。 Javaプログラムを実行するには、JREで十分です。
JREはJavaファイルの実行を対象としています
すなわち JRE = JVM + Javaパッケージクラス(util、math、lang、awt、swingなど)+ランタイムライブラリ。
JDKは主にJava開発を対象としています。すなわちJavaファイルを作成し(Javaパッケージを使用して)、JavaファイルをコンパイルしてJavaファイルを実行することができます。
JRE(Javaランタイム環境)
Java Runtime Environmentには、JVM、クラスライブラリ、その他のサポートファイルが含まれています。コンパイラ、デバッガなどの開発ツールは含まれていません。実際にはJVMがプログラムを実行し、クラスライブラリ、およびJREで提供されるその他のサポートファイルを使用します。 Javaプログラムを実行したい場合は、JREをシステムにインストールする必要があります。
Java仮想マシンは、プラットフォームに依存しないコード実行方法を提供します。つまり、任意のマシンで1回コンパイルして任意の場所(任意のマシン)で実行するということです。
JVM(Java仮想マシン)
私たちがJavaファイルをコンパイルするとき私たち全員が知っているように、出力は「exe」ではなく、「.class」ファイルです。 「.class」ファイルは、JVMで理解可能なJavaバイトコードで構成されています。 Java Virtual Machineは、基盤となるオペレーティングシステムとハードウェアの組み合わせに応じて、バイトコードをマシンコードに変換します。これは、ガベージコレクション、配列範囲のチェックなど、あらゆることに責任があります。JVMはプラットフォームに依存します。
JVMは、基盤となるオペレーティングシステムやマシンハードウェアアーキテクチャに依存しないマシンインタフェースを提供するため、「仮想」と呼ばれます。ハードウェアおよびオペレーティングシステムからのこの独立性は、Javaプログラムの追記型のどこでも実行可能な値の礎石です。
さまざまなJVM実装があります。これらは、パフォーマンス、信頼性、速度などの点で異なる可能性があります。これらの実装は、ガベージコレクションプロセスがどのように動作するかはJVMに依存し、Javaの仕様はそうではないこれを行うための具体的な方法を定義します。
Java仮想マシン(JVM) は、Java ByteCodeを実行できる仮想マシンです。これは、Javaソフトウェアプラットフォームのコード実行コンポーネントです。
Java Development Kit(JDK) は、Java開発者を対象としたOracle Corporationの製品です。 Javaの登場以来、Javaソフトウェア開発キット(SDK)として最も広く使用されてきました。
Java Runtime Environment は、Java Runtime、Runtime Environmentとも呼ばれます。
OpenJDK(Open Java Development Kit) は、Javaプログラミング言語のフリーでオープンソースな実装です。これは、Sun Microsystemsが2006年に始めた努力の結果です。実装は、リンク例外を除いてGNU一般公衆利用許諾契約書(GPL)の下でライセンスされています。
_ jdk _ (Java Development Kit):
_ jre _ (Javaランタイム環境)
Java Runtime Environmentには、JVM、クラスライブラリ、その他のサポートファイルが含まれています。 JREはJavaファイルの実行を対象としています。
_ jvm _ (Java仮想マシン)
JVM バイトコードをマシンコードに変換します 基礎となるオペレーティングシステムとハードウェアの組み合わせによって異なります。これは、ガベージコレクション、配列範囲のチェックなど、あらゆることを担当します。JavaVirtual Machineは、プラットフォームに依存しないコード実行方法を提供します。
_ jvm _ は、Javaコードが実行される仮想マシンです。
_ jre _ は、Javaアプリケーションを実行するために必要な環境(標準ライブラリとJVM)です。
_ jdk _ は、開発者向けツールとドキュメントを使用したJREです。
OpenJDK は、Oracleが所有する一般的なJDKとは異なり、JDKのオープンソースバージョンです。
_ jdk _ - JavaをByteCodeにコンパイルします。デバッガ、コンパイラなどで構成されています。
javac file.Java // Is executed using JDK
_ jvm _ - バイトコードを実行します。 JVMは、Javaプラットフォームを独立させるものです。しかし、JVMはプラットフォームによって異なります。
_ jre _ - JVMとJavaランタイムライブラリ。Javaプログラムを実行する。
言及する価値があるもう一つの側面:
JDK(Java開発キット)
名前が示すように、開発目的で必要になります。
たとえば、あるソフトウェア会社は、Javaプログラムのコンパイルと実行を含む新しいソフトウェアを開発する必要があるため、JDKをコンピューターにインストールします。
つまり、JDK = JRE + JVMと言えます。
JRE(Javaランタイム環境)
Javaプログラムを実行する必要があります。 Javaプログラムをコンパイルすることはできません。
たとえば、オンラインゲームをいくつか実行したい一般のコンピュータユーザーは、Javaプログラムを実行するために自分のシステムにJREが必要です。
JVM(Java仮想マシン)
ご存知かもしれませんが、それはバイトコードを実行します。 Windows、Mac、Linuxのいずれでコンパイルしても、Javaプログラムをコンパイルした後に取得する.class
ファイルが実行されるため、Javaプラットフォームに依存しません。
JDKを開く
まあ、私が上で言ったように。現在JDKは別の会社で作られています。そのうちの1つはオープンソースで、無料で一般に使用されているものです。一方、他にはOracle CorporationのJRockit JDKまたはIBM JDKがあります。
しかし、それらはすべて一般ユーザーには同じように見えるかもしれません。
結論
あなたがJavaプログラマーであればあなたのシステムにJDKが必要で、このパッケージにはJREとJVMも含まれますが、あなたがオンラインゲームをプレイしたい普通のユーザーならあなたはJREだけが必要です。 。
言い換えれば、JDKは祖父、JREは父親、そしてJVMは彼らの息子です。
Javaはその言語であり、厳密で厳密に型指定された構文が含まれていますので、これまでにご存知のはずです。
Java 2 Platform、Standard Editionは、J2SEとも呼ばれ、プラットフォームを指し、とりわけJava.langおよびJava.ioパッケージのクラスを含みます。それはJavaアプリケーションが構築されたビルディングブロックでした。
Java仮想マシン(JVM)は、コンパイルされたJavaコードを実行するソフトウェア仮想マシンです。コンパイルされたJavaコードは単なるバイトコードなので、JVMは実行前にそのバイトコードをマシンコードにコンパイルする責任があります。 JVMはメモリ管理も行いますので、アプリケーションコードで処理する必要はありません。
Java Development Kit(JDK)は、Java開発者がJavaアプリケーションを作成するために使用するソフトウェアの一部です。これには、Java言語コンパイラ、ドキュメントジェネレータ、ネイティブコードを操作するためのツール、およびプラットフォームクラスのデバッグを可能にするためのプラットフォーム用のJavaソースコードが含まれています。
Java Runtime Environment(JRE)は、コンパイルされたJavaアプリケーションを実行するためにエンドユーザーがダウンロードするソフトウェアの一部です。これにはJVMが含まれていますが、JDKにバンドルされている開発ツールは含まれていません。ただし、JDKにはJREが含まれています。
JVM: / Javaプログラムを実行する方法を記述する仕様。実際にバイトコードを実行し、Javaプラットフォームを独立させます。そうすることで、それはプラットフォームごとに異なります。 Windows用のJVMは、UNIX用のJVMとして動作することはできません。
JRE: JVMの実装。 (JVM +ランタイムライブラリ)
JDK: JRE + Javaコンパイラおよび他の基本ツールでゼロからJavaプログラムを構築
_ jvm _ :これは実際にはバイトコードインタプリタを意味します。プラットフォームに依存します。例えば、Windowsプラットフォームでは、 ' Java.exe 'または ' javaw.exe 'の前処理がjvmプロセスです。
_ jdk _ :は、Javaプログラム/アプリケーションを開発および実行するために必要なライブラリとユーティリティを含むツールキットです。
_ jre _ :はJavaアプリケーションの実行環境です。コンパイル済みプログラムのjvmを含むランタイム依存関係のみをサポートします。 Javaプログラムをコンパイルしたい場合は、jdkが必要です。
_ jvm _
JVM(Java Virtual Machine)は抽象マシンです。 Javaバイトコードを実行できるランタイム環境を提供する仕様です。 JVMは、多くのハードウェアおよびソフトウェアプラットフォームで利用できます。
_ jre _
JREは、Java Runtime Environmentの頭字語です。ランタイム環境を提供するために使用されます。JVMの実装です。物理的に存在します。JVMが実行時に使用するライブラリのセット+その他のファイルを含みます。
_ jdk _
JDKはJava Development Kitの頭字語です。物理的に存在します。JRE+開発ツールが含まれています。
リンク: - http://www.javatpoint.com/difference-between-jdk-jre-and-jvm
JVM:Javaの仮想マシン。 Javaコードをどう処理するかをmachineに指示します。 JVMをそのままダウンロードすることはできません。他のコンポーネントにパッケージされています。
JRE:上記で言及した他のコンポーネントはJREです。ランタイム環境を作成するのはJVM +その他のjarファイルです。
JDK:JRE(これにはJVMが含まれます)が含まれています。 JDKを入手したら、JREとJVMを別々にインストールする必要はありません。それはあなたの.Javaファイルを.classファイルにコンパイルするコンパイラを含みます
_ jvm _ は Java Virtual Machine と省略され、JVMはJavaアーキテクチャの主要コンポーネントです。 JVMはCプログラミング言語で書かれています。 JavaコンパイラはJVMのバイトコードを生成します。 JVMがバイトコードを読み取り、そのバイトコードを検証し、そのコードをibraryとリンクします。
_ jre _ は Java Runtime Environment と省略されます。実行時に環境を提供します。それは物理的に存在します。 JVM +ライブラリのセット(jar)+その他のファイルが含まれています。
_ jdk _ は Java Development Kit と省略されます。それはJavaアプリケーションを開発することです。また、Javaアプリケーションのデバッグと監視も行います。 JDKにはJRE +開発ツール(javac、Java)が含まれています
OpenJDK OpenJDKは、Sun JDKのオープンソース版です。 Oracle JDKはSunの公式JDKです。
_ jdk _ :Javaコードを書いて実行するのに必要な完全なパッケージ
OpenJDK :より良くするためのJDKの独立した実装
_ jvm _ :Javaコードをバイトコードに変換し、Javaコードのコンパイル方法、ロード方法、検証方法、エラーチェック方法、実行方法を指定する仕様を提供します。
_ jre _ :一部のJavaライブラリを使用してプログラムを実行するためのJVMの実装
素人用語では: - JDK = JRE +開発/デバッグツール 、ここでJDKはJavaの作成から実行までの私達の完全なパッケージです。バイトコード).
注: - JDKとJREのどちらをインストールする場合でも、JVMはパッケージの両方にバンドルされています。JVMはJITコンパイラがバイトコードをマシン固有のコードに変換する部分です。
_ jvm _ / Java仮想マシン。実際にはJavaバイトコードを実行します。これは、Javaプラットフォーム上の実行ブロックです。バイトコードをマシンコードに変換します。
_ jre _ Java Runtime Environmentは、Javaアプリケーションを実行するための最小要件を提供します。これは、Java仮想マシン(JVM)、コアクラス、およびサポートファイルで構成されています。
_ jdk _ / Java開発キット、それはあなたのアプリケーションソフトウェアを開発するためのすべてのツールを持っています。 JRE + JVMと同じです
Open JDK は、Javaプラットフォームのフリーでオープンソースの実装です。
_ jre _ はアプリケーションを実行しますが、JVMは1行ずつ命令を読み取るため、インタプリタです。
_ jdk _ = JRE +開発ツール
_ jre _ = JVM +ライブラリクラス