JVMは何ですか?
JVMはJava Virtual Machine(Java仮想マシン)の略であり、Javaプラットフォームの重要なコンポーネントです。それはJavaプログラムの実行環境であり、個別のオペレーティングシステムごとにソースコードを再コンパイルする必要なく、Javaプログラムをさまざまなオペレーティングシステムで実行できるようにします。
Java仮想マシンは、以前のJavaバージョンとの互換性も確保しており、旧バージョンのJavaプログラムを修正することなく、新しいJavaバージョンで実行できるようにします。これにより、JVMとJavaの新しいアップデートがあっても、Javaアプリケーションの安定性と継続性が保たれます。
JVMの任務は何ですか?
Javaアプリケーションのバイトコードとクラスファイルをロードすることです。
バイトコードとクラスファイルの妥当性を検証することです。
インタプリタまたはJust-In-Time(JIT)コンパイラを使用して、バイトコードとクラスファイルを実行することです。
Javaアプリケーションの実行時環境(JRE)を提供することです。
Javaアプリケーションのメモリとオブジェクトを管理することで、割り当てとガベージコレクションを含みます。
エラーマネージメントやログ記録などのユーティリティを提供します。
Javaアプリケーションを開発するためのAPIと標準ライブラリを提供します。
アクセス権の制御や制御された実行環境の提供により、Javaアプリケーションのセキュリティを確保します。
Java Native Interface(JNI)を介して、ネイティブライブラリやCやC++などの他の言語で書かれたアプリケーションとの対話能力を提供します。
メモリ領域、クラスファイルの形式、レジスタ、ガベージコレクションされるヒープメモリなどの領域の定義と重要なエラーレポートの提供を行います。
JVMのアーキテクチャは何ですか?
JVMのアーキテクチャは、次のコンポーネントから構成されています:
JavaのJVM構造
クラスローダー
クラスローダーは、Java仮想マシン(JVM)のサブシステムであり、Javaアプリケーションのクラスファイルやリソースをロードするために使用されます。Javaプログラムを実行すると、クラスローダーによって事前にロードされます。Javaには組み込みの3つのクラスローダーがあります。
ブートストラップクラスローダー: これは最初のクラスローダーであり、エクステンションクラスローダーのスーパークラスです。Java Standard Editionのクラス(java.lang、java.net、java.util、java.io、java.sqlなどのパッケージクラス)が含まれるrt.jarファイルをロードします。
エクステンションクラスローダー: これはブートストラップクラスローダーのサブクラスであり、システムクラスローダーの親クラスです。Javaの拡張クラスやサードパーティのAPIが含まれる.jarファイルをロードするために使用されます。
システム/アプリケーションクラスローダー: これはエクステンションクラスローダーのサブクラスです。クラスパスからクラスファイルをロードします。クラスパスは、環境変数やコマンドラインオプションによってユーザーがJavaアプリケーションで使用するクラスファイルの場所を指定するために使用されます。
クラス(メソッド)エリア
クラス(メソッド)エリアは、Javaのクラスとプログラムのメソッドのメタデータを格納するために使用されます。
ヒープ
ヒープは、プログラムによって割り当てられたJavaオブジェクトを格納する場所です。Javaオブジェクトが作成されると、ヒープにそのオブジェクトが格納されます。オブジェクトが使用されなくなると、ガベージコレクタによってヒープからオブジェクトが削除され、メモリスペースが解放されます。
スタック
Javaスタックは、フレームを格納します。ローカル変数や部分的な結果を保持し、メソッドの呼び出しと戻り値に役立ちます。
各スレッドには独自のJVMスタックがあり、スレッドと同時に作成されます。
メソッドが呼び出されるたびに新しいフレームが作成されます。そのメソッドの呼び出しが完了すると、フレームは破棄されます。
プログラムカウンタレジスタ
プログラムカウンタレジスタには、Java仮想マシンで実行中の命令のアドレスが格納されます。JavaプログラムがJVM上で実行されると、プログラムカウンタレジスタは次に実行される命令のアドレスを保持します。現在の命令が実行されると、プログラムカウンタレジスタの値はプログラム内の次の命令のアドレスを指すように更新されます。
ネイティブメソッドスタック
ネイティブメソッドスタックには、アプリケーションで使用されるすべてのネイティブメソッドが含まれます。
実行エンジン
それは次の要素を含んでいます:
仮想プロセッサ:仮想プロセッサは含まれます。
インタプリタ:バイトコードストリームを読み取り、命令を実行します。
Just-In-Time(JIT)コンパイラ:パフォーマンスの向上のために使用されます。JITはバイトコードの機能的に同等な部分を同時にコンパイルし、コンパイルにかかる時間を減らします。ここで、「コンパイラ」という用語は、Java仮想マシン(JVM)の命令セットから特定のCPUの命令セットに翻訳するコンパイラを指します。
Java Native Interface
Java Native Interface(JNI)は、C、C ++、アセンブリなどの他の言語で書かれたアプリケーションとの通信インターフェースを提供するフレームワークです。JavaはJNIフレームワークを使用して、出力をコンソールに送信したり、オペレーティングシステムのライブラリと対話したりします。
JavaのJVMの動作方法
Java仮想マシン(JVM)は、Javaソースコードからコンパイルされたバイトコードを読み取り、実行します。Javaプログラムがコンパイルされると、バイトコードのファイルが作成され、バイト形式でエンコードされた命令が含まれます。JVMはこのファイルを取得し、システムで実行するために機械語に変換します。
JVMのダウンロード方法は?
JVMを独立してインストールする必要はありません。JREまたはJDKをダウンロードしてインストールすると、JVMも同時にダウンロードおよびインストールされます。JREまたはJDKのダウンロードおよびインストールは、あなたのニーズに応じて行われます。
Javaアプリケーションを実行したいだけで、ソースコードを開発または変更する必要がない場合は、JREをダウンロードしてインストールしてJVMを使用することができます。
Javaアプリケーションを開発したり、コンパイラやデバッガなどの開発ツールを使用したりする場合は、JDKをダウンロードしてインストールする必要があります。