JVMの研究ノート - バイトコード命令

 JVMの研究ノート - バイトコード命令

バイトコード

図1は、信号0であり、コンピュータは、0と1の異なる組合せを介して、認識することができるデジタル動作上生成されます。さらに、異なる組み合わせもまた文字の様々な生成します。同様に、機械命令は、種々の異なる組み合わせによって生成することができます。異なる時間、異なるベンダーでは、機械語命令の集合から成ることは異なっています。しかし、結局、それは通常、ずっと先進化の互換性の拡張を設定し、基盤となるハードウェアのCPU命令です。マシンコードは、最も近い符号化されたCPU命令セットであり、CPUが直接命令を解釈することができると、マシンコードは、基礎となるハードウェアと結合されなければなりません。

質問:理由は、異なるハードウェアプラットフォームのプログラマは非常に非常に崩壊されたコードの複数のセットを記述する必要がある場合。Javaの使命はどこにでも実行し、一回の書き込みです。異なるオペレーティングシステムでは、異なるハードウェア・プラットフォーム、コードを変更することはできませんスムーズに実行することができます。

 

クロスプラットフォームのJAVAを達成するためにどのように?

コンピュータ工学の分野における任意の問題は、中間層を追加することによって解決することができます。したがって、中間コードが浮上している、すなわち「バイトコード」(バイトコード)。すべてのJava命令は約200であり、バイト(8ビット)は、バイトがバイトコード(バイトコード)と呼ばれる、256個の異なる指示情報を格納することができます。コードを実行する過程で、JVMバイトコードは、基礎となるオペレーティング・システムへの依存を遮蔽解釈;場合JVMバイトコードコンパイラは、実行されてもよいJITによるホットコードが動的機械コードにコンパイルなる実行を向上させます効率。

 

バイトコード命令

ニーモニックメモリを効率的にこれらの数字をマークするために特別な言葉を使ってオペコードニーモニックを設計等の方法により、アセンブリ言語バイトコードの機械語のメモリ、JVMとも改善を容易にします。ICONST_0代わっ00000011として、即ち、進数が0x03の、等です

次のようにメインのバイトコード命令は、次のとおりです。

1.ロードまたはストア命令

次のようにスタックフレームにおいて、前後テーブルと仮想マシンのオペランドスタックローカル変数スタック・フレームとの間の命令データ伝送により、共通コマンドです。

1)ローカル変数は、スタックに操作をロードします。ILOAD(スタック上にローカル変数のint型)とALOAD(スタック上にローカル変数オブジェクト参照)など。

2)ローカル変数テーブルを格納するスタックを動作させます。ISTOREとして、ASTOREが好きです。

3)非常に高い周波数の使用説明書であるスタックの上部にロード一定の動作を制御します。ICONST、BIPUSH、SIPUSH、LDCなど。

     * ICONST番号が読み込まれる(値IconstとロードリミットBIPUSH)-1 5。

     * BIPUSH、すなわちバイトImmdiatePUSH、-128と-127の間の数に応じ。

     32767 * SIPUSH、すなわちショート即時PUSH、負荷-32768

     * LDC、-2147483618 2147483647またはスタックにLDC命令を使用して文字列、JVMすなわち、一定の荷重。

2.演算命令

スタックフレーム上の2つの値のように、このようなIADD、IMULとして、動作、書き込み動作及び結果スタックを算出します。

3.型変換

値の二つの異なる種類の表示切替。I2L、D2Fが好きです。

 

4.オブジェクトの作成とアクセスの指示

クラスを作成するためによると、以下のように初期化メソッドは、共通の命令、関連の指示を呼び出すオブジェクト:

1)Objectコマンドを作成します。NEW、NEWARRAYが好きです。

2)アクセス属性コマンド。GETFIELD、PUTFIELDとして、GETSTATICが好きです。

3)命令の種類の強さを確認してください。INSTANCEOFとして、CHECKCASTが好きです。

管理命令のオペランドスタック

JVMスタック操作命令の直接制御を提供し、一般的なコマンドは次のとおりです。

1)ポップ操作。すなわち、このようなPOP、POP2即ち二つの要素として一つの要素、。

2)コピーしてスタックにトップ素子。DUPとして。

 

メソッド呼び出しとリターン命令

次のように共通の手順は以下のとおりです。

1)INVOKEVIRTUAL命令:メソッドのオブジェクト・インスタンスを呼び出します。

2)INVOKESPECIAL命令:インスタンスの初期化方法、プライベートメソッドは、親クラスのメソッドを呼び出します。

3)INVOKESTATIC命令:静的クラスメソッドを呼び出します。

4)RETURN命令:VOID戻り型。

 

7.同期コマンド

同期構造、そこMONITORENTER命令セットおよびセマンティクスMONITOREXITサポートの同期方法を使用するACC_SYNCHRONIZEDフラグJVM。

 

 

 

参考図書 - 「非常に効率的なコード」の章IV JVMへ

 

おすすめ

転載: www.cnblogs.com/deepSleeping/p/11423032.html