2011-10-29 13 views
5

stavo usando javap di studiare il codice di prodotto per una delle mie classi e ho notato il seguente output:voci "falsi" in uscita javap tabella locale

... 
frame_type = 255 /* full_frame */ 
    offset_delta = 11 
    locals = [ class Test, double, int, double, double, bogus, bogus, int, int, class "[D" ] 
    stack = [] 
... 

Qual è il significato di quelle tipo "fasullo"/voci variabili nella tabella locals? Come sono causati? Qual è il loro impatto sul codice risultante?

Il file di classe è stato prodotto utilizzando il compilatore Eclipse 3.7 e javap proviene da OpenJDK-1.6b22.

+0

Puoi condividere la fonte di questo metodo? E forse anche il bytecode? La mia ipotesi sarebbe che provenga da foreach, switch (enum), o da una delle altre caratteristiche che richiede che il codice venga autogenerato dal compilatore. –

risposta

2

mi sono imbattuto in this little gem mentre andando oltre la documentazione Javassist:

BOGUS

ultimo tipo public static BOGUS

rappresenta un valore non accessibile. Il codice non può accedere al valore rappresentato da questo tipo di . Si verifica quando bytecode riutilizza una posizione della tabella delle variabili locali con tipi non fusibili. Un esempio potrebbe essere compilato con il codice che utilizza la stessa posizione per un tipo primitivo in un ramo e un tipo di riferimento in un altro ramo.

Presumo che questa ambiguità è ciò che provoca le voci "falsi" nella tabella locals così ...

Problemi correlati