Ich lerne ASM-Bibliothek für die Generierung von Bytecode. Irgendwann machte ich einige Fehler mit schlechten lokalem Variablentyp und bekam einen Fehler:Was ist Stackmap-Tabelle in JVM-Bytecode?
Exception in thread "main" java.lang.VerifyError: Bad local variable type
Exception Details:
Location:
Loops.start()V @56: aload_1
Reason:
Type top (current frame, locals[1]) is not assignable to reference type
Stackmap Table:
full_frame(@24,{Object[#2],Object[#9]},{Integer})
full_frame(@25,{Object[#2],Object[#9]},{Integer,Integer})
same_locals_1_stack_item_frame(@44,Integer)
full_frame(@45,{Object[#2],Object[#9]},{Integer,Integer})
full_frame(@48,{Object[#2]},{Integer})
full_frame(@80,{Object[#2],Integer},{Integer})
full_frame(@81,{Object[#2],Integer},{Integer,Integer})
full_frame(@87,{Object[#2]},{Integer})
full_frame(@119,{Object[#2],Integer},{Integer})
full_frame(@120,{Object[#2],Integer},{Integer,Integer})
same_locals_1_stack_item_frame(@123,Integer)
Das Problem war nicht schwer zu finden und zu beheben, aber ich bin gespannt, was eine ist dieses stackmap Tisch Ding?
Ja, im Grunde ist es ein "Feature", das Sun hinzugefügt hat, weil ihr Verifier schmerzhaft langsam war und sie zu dicht waren, um eine andere Möglichkeit zu sehen, es zu beschleunigen. –