Java Virtual Machine is a program/software which takes Java bytecode (.class files) and converts the byte code (line by line) into machine understandable code.
JVM contains a module known as a class loader. A class loader in JVM loads, links and, initializes a program. It −
Loads the class into the memory.
Verifies the byte code instructions.
Allocates memory for the program.
JVM has five memory locations namely −
Heap − Runtime storage allocation for objects (reference types).
Stack − Storage for local variables and partial results. A stack contains frames and allocates one for each thread. Once a thread gets completed, this frame also gets destroyed. It also plays roles in method invocation and returns.
PC Registers − Program Counter Registers contains the address of an instruction that JVM is currently executing.
Execution Engine − It has a virtual processor, interpreter to interpret bytecode instructions one by one and a JIT, just in time compiler.
Native method stacks − It contains all the native methods used by the application.