Stack based VM vs Register based VM

Updated: 2021-11-19

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 and PUSH
  • 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).