开发者

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?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜