JVMアーキテクチャモデル
Javaコンパイラによって入力される命令ストリームは、基本的にスタックベースの命令セットアーキテクチャであり、他の命令セットアーキテクチャはレジスタベースの命令セットアーキテクチャです。具体的には、2つのアーキテクチャの違い
は、スタックアーキテクチャの特性に基づいています。
- リソースに制約のあるシステムに適した、よりシンプルな設計と実装。
- レジスタ割り当ての問題を回避します。ゼロアドレス命令方式を使用して割り当てます。
- 命令ストリーム内のほとんどの命令はゼロアドレス命令であり、それらの実行は操作スタックに依存します。命令セットは小さく、コンパイラーは簡単に実装できます。
- ハードウェアサポート、より優れた移植性、より優れたクロスプラットフォームは必要ありません
レジスタアーキテクチャの特性に基づく
- 典型的なアプリケーションは、従来のPCやAndroidのDavlik仮想マシンなどのx86バイナリ命令セットです。
- 命令セットアーキテクチャはハードウェアに完全に依存しており、移植性は低いです
- 優れたパフォーマンスとより効率的な実行
- 操作を完了するために必要な指示が少なくなります。
- ほとんどの場合、レジスタアーキテクチャに基づく命令セットは、1アドレス命令、2アドレス命令、および3アドレス命令によって支配されることが多く、スタックアーキテクチャに基づく命令セットはゼロアドレス命令に基づいています。
例
論理演算2+ 3も実行され、命令は次のとおりです。
スタックベースの計算プロセス(例としてJava仮想マシンを取り上げます):
iconst_2 //常量2入栈
istore_1
iconst_3 // 常量3入栈
istore_2
iload_1
iload_2
iadd //常量2/3出栈,执行相加
istore_0 // 结果5入栈
レジスタベースの計算プロセス
mov eax,2 //将eax寄存器的值设为1
add eax,3 //使eax寄存器的值加3