Java を一定期間勉強すると、誰もが jvm の重要性を理解できるようになったと思いますが、jvm の命令システムについてはあまり知らないかもしれません。文字通り、命令を呼び出すためのツールです。具体的な内容の紹介については、以下に示して、jvm register について共有していきますので、一緒に勉強していきましょう。
1. 指導体系の説明
JVM 命令システムは、他のコンピュータ命令システムと非常によく似ています。同時に、Java 命令には、オペコードとオペランドという 2 つの部分も含まれます。オペコードは 8 ビットの 2 進数で、その後に必要に応じて長さが決定されるオペランドが続きます。オペレーション コードは、命令操作の性質を指定するために使用されます (ここでは、アセンブリ シンボルの形式で説明します)。たとえば、iload はメモリから整数をロードすることを意味し、anearray は新しい配列にスペースを割り当てることを意味し、iand は、 2 つの整数の「AND」 ,ret は、メソッドの呼び出しから返されるプロセス制御を表します。長さが 8 ビットを超える場合、オペランドは複数のバイトに分割されて格納されます。この状況に対して、JVM は「バイジェンディアン」エンコード方式を採用します。つまり、上位ビットが下位バイトに配置されます。この状況は、Motorola や RISCCPU で使用されるエンコード方式と同じですが、Intel で使用される「リトルエンディアン」エンコード方式、つまり、下位ビットが下位バイトを格納するものとは異なります。
Java コマンド システムは、Java 言語を実装するために設計されており、メソッドの呼び出しと複数の優先順位のシステムを監視するための命令が含まれています。 JVM の 8 ビット オペコードの長さにより、JVM の命令数は最大 256 になり、現在では 160 を超える命令が使用されています。
2. よく使用されるレジスタ
すべての CPU には、システム ステータスとプロセッサが必要とする情報を保持するレジスタ セットが含まれています。仮想マシンがより多くのレジスタを定義すると、スタックやメモリにアクセスせずにレジスタからより多くの情報を取得できるため、実行速度の向上に役立ちます。ただし、仮想マシン内のレジスタの数が実際の CPU の数を超える場合、仮想マシンの実装時にコンベンショナル メモリを使用してレジスタをシミュレートするために大量のプロセッサ時間が費やされ、実際には仮想マシンの効率が低下します。 。このため、JVM は最もよく使用される 4 つのレジスタのみを設定します。彼らです:
(1) PCプログラムカウンタ
(2) optopオペランドスタックトップポインタ
(3) フレーム現在の実行環境ポインタ
(4) vars は、現在の実行環境の最初のローカル変数へのポインタを指します。
すべてのレジスタは 32 ビットです。 PC はプログラムの実行を記録するために使用されます。 optop、frame、vars は、Java スタック領域へのポインタを記録するために使用されます。
上記は Java の JVM 命令システムの紹介であり、この記事では主に理論的な知識のポイントに焦点を当てています。学習後は、将来の知識の復習を容易にするためにドキュメントを保存できます。