你说的是哪个虚拟机?JVM这样的?还是VMware这样的?
如果兼指所有,那么虚拟机的出现单纯就是为了抽象掉底层。为什么要抽象掉底层?因为硬件和操作系统都越来越不一样了。同样是X86的CPU,有的支持到SSE4,有的只支持MMX,还有的只支持3DNow!,代码若要跑得快需要自己去做繁琐的检测,还要写多份代码来应对。在只有MMX和3DNow!之分的年代最多代码量翻倍,但之后的发展越来越不可控制了。这还只是CPU的一项区别。其他硬件也出现了各种不同,例如硬盘接口SCSI、IDE、SATA、iSCSI,3D运算DirectX、OpenGL、3dfx,等等。操作系统之差异则无需赘述了。
这一切都应该有一个机制来代理。适配硬件的事情都很机械,理论上只要设计一种合适的机制,就能自动兼容所有硬件。于是虚拟机就诞生了。JVM之类的运行时虚拟机还抽象了操作系统,而VM之类的硬件虚拟机则只抽象了硬件。