Voici le code généré a montré par javap
quand je lui ai demandé d'afficher ma compilé classe (I sélectionné méthode)java javap et bytecode groovy comparaison
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
Voici le code qui apparaît par groovyConsole
(même méthode)
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
Mais qui bytecode sont plus raw
? Pour autant que je comprenne, javap
ajouté un peu de style, donc le deuxième exemple devrait être plus authentique bytecode
. Ai-je raison?
Je suis curieux de savoir lesquels d'entre eux sont plus précis dans l'affichage de la même manière que dans le fichier 'class' et à en juger par tous les assembleurs c'est la deuxième variante. – lapots
Le fichier .class contient des données binaires. Pour cette raison, aucune de ces représentations ne montre les données de la même manière que dans le fichier de classe. – yole