|
多くの友人は私のように長年JAVAを使っているかもしれませんが、JDK、JRE、JVMのつながりや違いはいつも曖昧でした。 今日はこの三つの関係を整理するためにこの記事を書きます。
JDK : Java Development ToolKit。 JDKはJava Runtime Envirnment、多数のJavaツール(javac/java/jdbなど)、Javaベースのライブラリ(例:Java APIにはrt.jarを含む)を含むJAVA全体の中核です。 最も主流なJDKはSunがリリースしたJDKです。Sunに加え、多くの企業や組織が自社のJDKを開発しています。例えば、海外のIBM社は自社のJDKを開発し、国内のTaobaoも独自のJDKを開発し、IBMのJDKは自社のニーズに適応するために独自のJDKを開発しています。例えばIBMのJDKはSUNのJDKよりもはるかに効率的だと言われています。 しかしいずれにせよ、まずは基本的なサンJDKを習得する必要があります。 JDKには3つのバージョンがあります。 J2SE、標準版、標準版は、通常J2EEエンタープライズ版を使用しており、このJDKを使ってJ2EEアプリケーションを開発しました。J2MEマイクロ版は主にモバイルデバイスや組み込みデバイスのJavaアプリケーションに使用されています
私たちはしばしばJDKをJava APIを指すのに使います。Java APIはJavaのアプリケーションプログラミングインターフェースであり、実際には先人たちが書いたいくつかのJavaクラス、重要な言語構造や基本的なグラフィックス、ネットワークやファイルI/Oなどを含みます。これらのクラスは、私たち自身のプログラムで前任者が書いたものと呼び、開発の基盤としています。 もちろん、より良いパフォーマンスや強力な機能を備えたサードパーティ製ライブラリがますます増えています。
JRE:Java ランタイム環境です。 言い換えれば、すべてのJavaプログラムはJREの下で動かなければなりません。 JVMおよびJAVAコアライブラリおよびサポートファイルを含みます。 JDKと比べて、開発ツール(コンパイラ、デバッガー、その他のツール)は含まれていません。
JVM:Java Virtual Mechinal(JAVA仮想マシン)。 JVMはJREの一部であり、JREは実際のコンピュータ上で様々なコンピュータ機能をシミュレートして実装された架空のコンピュータです。 JVMはプロセッサ、スタック、レジスタなどの独自の完全なハードウェアアーキテクチャを持ち、対応する命令システムも備えています。 JVMの主な役割は、自身の命令セット(すなわちバイトコード)を解釈し、それをローカルCPUの命令セットやOSのシステム呼び出しにマッピングすることです。 このJava言語はクロスプラットフォームで動作しますが、実際には異なるオペレーティングシステムであり、異なるJVMマッピングルールを用いてオペレーティングシステムに依存しない完全なクロスプラットフォームを実現します。 JVMは上位レベルのJavaソースファイルには関心がなく、ソースファイルによって生成されるクラスファイルだけを気にします。 クラスファイルはJVM命令セット、シンボルテーブル、そしていくつかの補助情報で構成されています。 以下の図はJDK、JRE、JVMの関係性をよく概観しています。
実際の開発状況は、JDK(JAVA APIを呼び出し)を使って自分たちのJAVAプログラムを開発した後、JDKのコンパイラ(javac)を使ってテキストのjavaファイルをJAVAバイトコードにコンパイルし、これらのJAVAバイトコードをJRE上で実行します。JVMはこれらのバイトコードを解析し、CPU命令セットやOSのシステムコールにマッピングします。
|