14

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

2 Answers 2

25

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.

Sign up to request clarification or add additional context in comments.

Comments

4

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?

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.