JVM (Java Virtual Machine) は抽象的なマシンです。 Javaバイトコードを実行できる実行環境を提供する仕様です。
JVM は、多くのハードウェアおよびソフトウェア プラットフォームで利用できます (つまり、JVM はプラットフォームに依存します)。
JVMとは
それは次のとおりです。
- 仕様 Java仮想マシンの動作を指定します。ただし、実装プロバイダーはアルゴリズムを選択することは独立しています。その実装は Oracle およびその他の企業によって提供されています。
- 実装 その実装は JRE (Java ランタイム環境) として知られています。
- ランタイムインスタンス コマンド プロンプトで Java コマンドを記述して Java クラスを実行すると、JVM のインスタンスが作成されます。
何をするのか
JVM は次の操作を実行します。
- コードをロードします
- コードを検証します
- コードを実行します
- 実行環境を提供します
JVM は以下の定義を提供します。
- メモリ領域
- クラスファイル形式
- レジスタセット
- ガベージコレクションされたヒープ
- 致命的なエラーの報告など
JVM アーキテクチャ
JVM の内部アーキテクチャを理解しましょう。クラスローダー、メモリ領域、実行エンジンなどが含まれます。
1) クラスローダー
クラスローダーは、クラス ファイルをロードするために使用される JVM のサブシステムです。 Java プログラムを実行するときは常に、最初にクラスローダーによってロードされます。 Java には 3 つの組み込みクラスローダーがあります。
//Let's see an example to print the classloader name public class ClassLoaderExample { public static void main(String[] args) { // Let's print the classloader name of current class. //Application/System classloader will load this class Class c=ClassLoaderExample.class; System.out.println(c.getClassLoader()); //If we print the classloader name of String, it will print null because it is an //in-built class which is found in rt.jar, so it is loaded by Bootstrap classloader System.out.println(String.class.getClassLoader()); } }今すぐテストしてください
出力:
sun.misc.Launcher$AppClassLoader@4e0e2f2a null
これらは、Java によって提供される内部クラスローダーです。独自のクラスローダーを作成する場合は、ClassLoader クラスを拡張する必要があります。
2) クラス(メソッド)エリア
クラス(メソッド)領域には、実行時定数プール、フィールドおよびメソッドのデータ、メソッドのコードなどのクラスごとの構造が格納されます。
3) ヒープ
オブジェクトが配置される実行時データ領域です。
4) スタック
Java スタックはフレームを保存します。ローカル変数と部分的な結果を保持し、メソッドの呼び出しと戻りに関与します。
各スレッドにはプライベート JVM スタックがあり、スレッドと同時に作成されます。
メソッドが呼び出されるたびに、新しいフレームが作成されます。フレームは、メソッドの呼び出しが完了すると破棄されます。
5) プログラムカウンターレジスタ
PC (プログラム カウンタ) レジスタには、現在実行されている Java 仮想マシン命令のアドレスが含まれます。
6) ネイティブメソッドスタック
これには、アプリケーションで使用されるすべてのネイティブ メソッドが含まれています。
7) 実行エンジン
を含む:
8) Java ネイティブ インターフェイス
Java Native Interface (JNI) は、C、C++、アセンブリなどの別の言語で書かれた別のアプリケーションと通信するためのインターフェースを提供するフレームワークです。Java は JNI フレームワークを使用して、出力をコンソールに送信したり、OS ライブラリと対話したりします。