Local variables in java bytecode
I am trying to learn java bytecode and I stumbled on this:
I compiled this very simple code with the -g
option:
public class Test
{
public static void main(String args[])
{
double a = 1.0;
int b = (int)a;
}
}
The main code turned out to be:
0 dconst_1
1 dstore_1
2 dload_1
3 d2i
4 istore_3
5 return
In addition, main's maximum local variables is 4, and the LocalVariableTable has only 3 entries (args, a开发者_如何转开发, b). I am curious to know why the compiler reserved 4 local variables while there is clearly only 3, and localvariable[2]
is not used. Is there something I'm missing? Thank you
it is 4 because long and double occupies 2 consecutive entries in the frame. This is clearly specified by the Java JVM specification:
A value of type long or type double occupies two consecutive local variables. Such a value may only be addressed using the lesser index. For example, a value of type double stored in the local variable array at index n actually occupies the local variables with indices n and n +1; however, the local variable at index n +1 cannot be loaded from. It can be stored into. However, doing so invalidates the contents of local variable n.
I don't know Java bytecode, this is just a guess:
Could it have to do with the fact that a
is a double
? Are two words being reserved for it?
精彩评论