は、私は私のコンパイルされたクラスを表示するように頼んだときjavap
で示したコード生成です(私はメソッドを選択)のjavaてjavapとグルーヴィーなバイトコードの比較
int multiply(int, int);
flags:
Code:
stack=2, locals=3, args_size=3
0: iload_1
1: iload_2
2: imul
3: ireturn
LineNumberTable:
line 2: 0
LocalVariableTable:
Start Length Slot Name Signature
0 4 0 this LMyClass;
0 4 1 a I
0 4 2 b I
ここgroovyConsole
によって表示されるコード、(同じ方法があります)
public multiply(II)I
L0
LINENUMBER 4 L0
ILOAD 1
ILOAD 2
IMUL
IRETURN
L1
LDC 0
IRETURN
LOCALVARIABLE this LMyClass; L0 L1 0
LOCALVARIABLE a I L0 L1 1
LOCALVARIABLE b I L0 L1 2
MAXSTACK = 2
MAXLOCALS = 3
ただし、どのバイトコードがraw
ですか?私が理解する限り、javap
はそれにスタイルを追加しました。そのため、2番目の例はより本物のものになるはずですbytecode
。 私はそうですか?
'class'ファイルと同じように表示するのがより正確で、すべてのアセンブラで判断するのが第2の変種です。 – lapots
.classファイルにはバイナリデータが含まれています。このため、これらの表現のいずれも、クラスファイルに格納されているのと同じ方法でデータを表示しません。 – yole