Penguin
Note: You are viewing an old revision of this page. View the current version.

A virtual machine is a program that executes code designed for a different type of computer than the program is running on. The JVM virtual machine for Java is the most widely used, just about every WebBrowser has one.

Virtual machines are used for:

Compatibility
Virtual machines are simple, compilers are complicated. Object code from one compiler can run on any type of machine, with any type of CPU, providing someone's written a virtual machine for it.
Safety
A virtual machine can limit what the object code it is running does. In theory that Java program your web browser automatically downloaded from a webserver in Estonia and started to run won't write anything to your disk because the JVM won't let it.
Novelty
Programming languages implicitly define what a computer is. If that computer is far different from a VonNeumannMachine?, then you may as well write a virtual machine for it, and have your compiler create code for that machine. The result probably won't be much less efficient than a native code compiler, and will be far easier to attain.
Debugging
A virtual machine can monitor what the object code it is running does. You can break out of a programming that is running on a virtual machine at any point and examine everything about the machine's state. (There's a x86 emulator for Linux for this purpose, anyone remember what it's called?)
Emulation
I get to play my favourite ZX Spectrum video game on my PC. Whee!