Stack based VM vs Register based VM
VMs: an abstraction of a computer, that emulates a real machine.
Process VM vs System VM
- Process VM: application virtual machine, or Managed Runtime Environment (MRE), runs as a normal application inside a host OS and supports a single process. Think about JVM.
- System VM: a "guest" operating system (the actual hardware is the "host").
The rest of this page is about process virtual machines.
Stack based VM
An interpreter of a special bytecode, that translates its in real time for execution on the CPU.
Virtual machine does not need to know the operand addresses explicitly, as calling the stack pointer will give (Pop) the next operand.
Example: JVM, CLR.
Register based VM
Also interpreters of bytecode, don’t use the stack for the operands but rather a set of registers.
Register based VMs tend to be more complex, they are also generally faster at runtime, since they map much more closely to the CPU. They tend to generate and execute better efficient code.
There is no POP
or PUSH
operations. But unlike the stack, we need to explicitly mention the addresses of the operands.
- requires fewer, typically more complex, virtual machine instructions
- instructions execute faster, no overhead of
POP
andPUSH
- allows for optimizations cannot be done in the stack based VMs.
- Average register instruction is larger than an average stack instruction, as we need to specify the operand addresses explicitly.
Examples:
- Lua, good performance, used in video grames as the scripting language.
- Dalvik VM (replaced by Android Runtime, or ART).