Java 虚拟机和 VMWare VM 有什么区别?

Win*_*ser 6 java virtualization vmware-workstation virtual-machine

我知道它们都被称为“虚拟机”,但确切的区别是什么?

txt*_*elp 5

虚拟机一词是一种口语,因为它仅指机器的概念(而不是实际事物本身)。因此,它可以指几乎任何像机器一样“运行”的软件(因此是虚拟的)。视频游戏模拟器是一个虚拟机(实际上很像 JavaVM 的工作方式)。

不同类型的虚拟机之间最大的区别在于它们虚拟化的内容以及虚拟化的方式(即它们如何抽象机器的概念)。

VMWare(VirtualBox/等)尝试将主机上的硬件呈现给来宾机,以便来宾机可以直接使用硬件(就像能够在来宾机上使用 USB 设备一样),在这种情况下,实际上并不多虚拟化(在这个词的经典意义上),因为来宾使用硬件本身。对此,VMWare/等。更像是硬件代理而不是“虚拟机”。为一种平台/架构构建的软件仍将仅针对该平台/架构运行,无论虚拟机访客/主机如何。

对于Java,更恰当的说法是“the”Java Virtual Machine,而不是“a”Java virtual machine;JVM 尝试抽象硬件和机器本身,因此开发人员不必关心架构类型或平台等问题。使用 Java 构建的软件应该在安装了正确 JVM 版本的任何平台上运行,无论物理机器类型如何。

虚拟机的这两个概念之间的区别在于抽象和本机运行代码(即直接在硬件上)。JVM 尝试抽象尽可能多的平台/架构/机器,以使代码尽可能不可知,以便能够在尽可能多的设备(支持 Java)上运行,而 VMWare/VirtualBox 容器抽象了尽可能地减少机器的物理性,这样您就可以减少运行平台所需的物理硬件,尽管您仍然具有相同的软限制(例如,我无法编写 ARM 程序集并期望它“仅在 x86 处理器上运行”)在 VMWare/VirtualBox 中)。

这两种类型的虚拟机之间的“确切”差异可以解释更多的细节(比将 JVM 与 .NET 或 WINE 模拟器进行比较更重要),但这涉及到较低级别的系统设计;不过,从较高的层面来看,这应该有助于解释 JVM 和 VMWare VM 之间的主要区别。

我希望这有助于增加一些清晰度。