Вот код, генерируемый показал на 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
добавил к нему некоторый стиль, поэтому второй пример должен быть более подлинным bytecode
. Я прав?
Мне любопытно, какие из них точнее отображать его так же, как в файле 'class', и, судя по всем ассемблерам, это второй вариант. – lapots
Файл .class содержит двоичные данные. Из-за этого ни одно из этих представлений не отображает данные так же, как они хранятся в файле класса. – yole