2011-10-29 10 views
5

que estaba usando javap para estudiar el código producido por una de mis clases y observaron los siguientes resultados:entradas "falsos" en la salida javap tabla local

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

¿Cuál es el significado de ese tipo "falso"/entradas variables en la tabla locals? ¿Cómo son causados? ¿Cuál es su impacto en el código resultante?

El archivo de clase se produjo utilizando el compilador Eclipse 3.7 y javap provino de OpenJDK-1.6b22.

+0

¿Se puede compartir la fuente de este método? Y tal vez también el bytecode? Mi suposición sería que proviene de foreach, switch (enum) u otra de las características que requiere que el código sea autogenerado por el compilador. –

Respuesta

2

me encontré con this little gem mientras va sobre la documentación Javassist:

FALSA

pública Tipo static final FALSA

Representa un valor que no sea accesible. El código no puede acceder al valor que representa este tipo . Ocurre cuando el bytecode reutiliza una posición de tabla de variables local con tipos no fusionables. Un ejemplo sería el código compilado que utiliza la misma posición para un tipo primitivo en una rama y un tipo de referencia en otra rama.

Presumo que esta ambigüedad es lo que hace que las entradas "falsos" en la tabla locals así ...

Cuestiones relacionadas