2016-04-01 5 views
1

誰かがJVMのオペコードと並んで数字をどのように計算するのか説明できますか? オペコードの場合は1バイト、オペランドの場合は残りのバイトのように思えます。私は正しいですか?JVMバイトコードの説明

例:

Method int add12and13() 
0 bipush 12 
2 bipush 13 
4 invokestatiC#3 // Method Example.addTwoStatic(II)I 
7 ireturn 
+1

一部の命令は1バイトです。 –

+0

このようなトピックに興味がある場合は、[公式ソース](https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html)から始めてください。 – Holger

+0

あなたの必要を満たす答えを忘れないでください。それ以外の場合は、まだ不明な点を質問に追加してください。 – Holger

答えて

4

あなたが正しいです。これはメソッドの先頭からのバイトコードオフセットです。

bipushには1バイトのパラメータがあるため、合計で2バイト必要です。

invokestaticは、固定プールインデックスのopcode + 2バイトをとります。つまり、次の命令のオフセットは、invokestaticから+3バイトです。