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
Bytecode is the compiled format for Java programs. Once a Java program has been converted to bytecode, it can be transferred across a network and executed by Java Virtual Machine (JVM). Bytecode files generally have a . class extension.
They can be executed by intepretation, just-in-time compiling, or any other technique that was chosen by the designer of a particular JVM. A method's bytecode stream is a sequence of instructions for the Java virtual machine. Each instruction consists of a one-byte opcode followed by zero or more operands.
Java Virtual Machine (JVM) is a engine that provides runtime environment to drive the Java Code or applications. It converts Java bytecode into machines language. JVM is a part of Java Run Environment (JRE). In other programming languages, the compiler produces machine code for a particular system.
The Java Virtual Machine has a heap that is shared among all Java Virtual Machine threads. The heap is the run-time data area from which memory for all class instances and arrays is allocated. Integer b = 2; the local variable b is stored in the stack memory and contains a reference to a heap allocated Integer object.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With