"Virtual Machine" is an overloaded term. It can either mean virtualization of an existing CPU (like the x86), or of an abstract bytecode machine (like the JVM or Dalvik). In the former case, you have to efficiently virtualize/emulate an entire system (including stuff like hardware devices and CPU interrupts); in the latter, you only have to execute the bytecode program well, which most VMs of this sort compile just-in-time (they compile the bytecode program into a native equivalent at execution time).