2009-11-21 35 views
14

estoy tratando de aprender el código de bytes de Java y me encontré con esto: compilé este código muy simple con la opción -g:Las variables locales en el código de bytes de Java

public class Test 
{ 
public static void main(String args[]) 
{ 
    double a = 1.0; 
    int b = (int)a; 
} 
} 

El código principal resultó ser:

0 dconst_1 
1 dstore_1 
2 dload_1 
3 d2i 
4 istore_3 
5 return 

Además, las variables locales máximas de main son 4 y LocalVariableTable tiene solo 3 entradas (args, a, b). Tengo curiosidad por saber por qué el compilador reservó 4 variables locales mientras que claramente hay solo 3, y no se usa localvariable[2]. ¿Se me escapa algo? Gracias

Respuesta

24

es 4 porque largo y doble ocupa 2 entradas consecutivas en el marco. Esto está claramente especificado por el Java JVM specification:

Valor de tipo largo o tipo doble ocupa dos variables locales consecutivos. Tal valor solo puede ser dirigido usando el índice menor. Para el ejemplo , un valor de tipo double almacenado en la matriz de variables locales en el índice n ocupa realmente las variables locales con los índices n y n +1; sin embargo, la variable local en el índice n +1 no puede ser cargada desde. Puede ser almacenado en. Sin embargo, al hacerlo, se invalida el contenido de la variable local n.

4

no sé el código de bytes de Java, esto es sólo una suposición:

Podría tener que ver con el hecho de que es un adouble? ¿Se le están reservando dos palabras?

Cuestiones relacionadas