Java仮想マシン(JVM)、違いJDK、JRE&JVM–Core Java
Javaは高レベルのプログラミング言語です。 高水準言語で書かれたプログラムは、どのマシンでも直接実行できません。 まず、その特定の機械語に翻訳する必要があります。 Javacコンパイラはこのことを行い、javaプログラムを取ります(。ソースコードを含むjavaファイル)とマシンコード(バイトコードまたはと呼ばれる。クラスファイル)。,
Java仮想マシン(JVM)は、実際のマシン(コンピュータ)に存在する仮想マシンであり、JVMのマシン言語はバイトコードです。 ここでコンパイラでは、生のバイトコードJVMにより異なるマシンコードの種類ごとに機です。 JVMの実行バイトで生成されたコードをコンパイラを出力します。 JVMは、javaプラットフォームを独立させるものです。
だから、今我々はJVMの主な機能は、コンパイラによって生成されたバイトコードを実行することであることを理解しました。, 各事業システムが異なるJVMし、出力して実行後のバイトコードは同じすべてのシステムです。 つまり、Windowsで生成されたバイトコードはMac OSで実行でき、その逆も可能です。 そこで我々はjavaと新しいパスワードを入力してく独立した言語です。 同じことが下の図で見ることができます:
すべてを要約すると、Java仮想マシン(JVM)は実際のマシン(コンピュータ)で実行され、Javaバイトコードを実行する仮想マシンです。, JVMはJavaソースコードを理解していないので、*をコンパイルするjavacコンパイラが必要です。取得するjavaファイル*。JVMによって理解されるバイトコードを含むクラスファイル。 JVMはjavaを移植可能にします(一度書き込み、どこでも実行)。 各事業システムが異なるJVMし、出力して実行後のバイトコードは同じすべてのシステムです。
JVMアーキテクチャ
JVMがどのように動作するかを見ることができます:
クラスローダー:クラスローダーは、読み取ります。,クラスファイルとメソッド領域にバイトコードを保存します。
メソッド領域:すべてのクラス間で共有されるJVM内の唯一のメソッド領域があります。 このクラスのレベルでの情報です。クラスファイル。
ヒープ:ヒープは、オブジェクトが割り当てられるJVMメモリの一部です。 JVMの作成クラスオブジェクトです。クラスファイル。
Stack:StackはJVMメモリの一部でもありますが、Heapとは異なり、一時変数の格納に使用されます。
PC Registers:これにより、どの命令が実行され、どの命令が実行されるかを追跡することができます。, からの指示を行いますので、スレッドは、各スレッドが別々のPCに登録できます。
ネイティブメソッドスタック:ネイティブメソッドは、仮想マシンの実行時データ領域にアクセスできます。
ネイティブメソッドのインターフェイスも可能でjavaコードを呼び出することができるネイティブなアプリケーション. ネイティブアプリケーショ
ガベージコレクション:クラスインスタンスはjavaコードによって明示的に作成され、使用後はメモリ管理のためにガベージコレクションによって自動的,
JVM Vs JRE Vs JDK
JRE:JREは、java仮想マシンが実行される環境です。 JREを含むJava仮想マシン(JVM),クラスライブラリ、およびその他のファイルを除く開発ツールなどのコンパイラとアンインストールします。
つまり、JREでコードを実行できますが、jreでコードを開発およびコンパイルすることはできません。
JVM:上記で説明したように、JVMはJREが提供するクラス、ライブラリ、およびファイルを使用してプログラムを実行します。,
JDK:JDKはJREのスーパーセットであり、JREがコンパイラ、デバッガなどの開発ツールと一緒に持っているすべてのものが含まれています。