我知道它们都被称为“虚拟机”,但究竟有什么区别呢?
答案1
虚拟机这个术语是一个口语,它仅仅指主意指机器(而非实际事物本身)。因此,它可以指代几乎任何“行为”像机器的软件(因此称为虚拟软件)。视频游戏模拟器就是虚拟机(实际上与 JavaVM 的工作方式非常相似)。
不同类型的虚拟机之间最大的区别在于什么他们虚拟化和如何他们做到了(即他们如何抽象出机器的概念)。
VMWare(VirtualBox 等)尝试将主机上的硬件呈现给客户机,以便客户机可以直接使用硬件(例如能够在客户机上使用 USB 设备),并且在这种情况下,实际上并没有太多虚拟化(按照这个词的传统意义),因为客户机使用硬件本身。对此,VMWare 等更像是硬件代理,而不是“虚拟机”。无论虚拟机客户机/主机如何,为一个平台/架构构建的软件仍将仅在该平台/架构上运行。
至于 Java,更确切地说是“这个”Java 虚拟机,而不是“一个”Java 虚拟机;JVM 试图抽象硬件和机器本身,这样开发人员就不必关心架构类型或平台之类的事情。使用 Java 构建的软件应该可以在安装了正确 JVM 版本的任何平台上运行,无论物理机器类型如何。
虚拟机的这两个概念之间的区别在于抽象和本机运行代码(即直接在硬件上)。 JVM 尝试尽可能多地抽象平台/架构/机器,以使代码尽可能不可知,以便能够在尽可能多的设备(支持 Java)上运行,而 VMWare/VirtualBox 容器则尽可能多地抽象机器的物理性,以便您可以减少运行平台所需的物理硬件,尽管您仍然有相同的软限制(例如,我无法编写 ARM 汇编并期望它在 VMWare/VirtualBox 中的 x86 处理器上“运行”)。
有相当多的细节可以解释这两种虚拟机之间的‘确切’差异(比将 JVM 与 .NET 或 WINE 模拟器进行比较要多得多),但这涉及到较低级别的系统设计;但在较高层次上,这应该有助于解释 JVM 和 VMWare VM 之间的主要区别。
我希望这有助于澄清一些问题。
答案2
主要区别在于底层机器。对于 Java,它是一个指定良好的临时纯软件机器,具有自己的机器语言(字节码),而对于 VMWare(或 VirtualBox 等),所呈现的底层机器接近于使用与真实硬件(x86)相同的机器语言的物理 PC。
答案3
JVM 是 Java 用来执行 Java 程序的虚拟机,因此开发人员只需编译一次代码,就可以在其他操作系统和体系结构上运行该程序而不必重新编译,但有一个条件,即 Java 程序需要由与该机器的体系结构和操作系统兼容的 JVM 来运行。
VMware VM 是虚拟机管理程序软件,用于创建和运行虚拟机。这里的“虚拟机”引自维基百科:
在计算领域,虚拟机 (VM) 是计算机系统的仿真。虚拟机基于计算机架构,提供以下功能:物理计算机.它们的实现可能涉及专用硬件、软件或两者的组合。
https://en.wikipedia.org/wiki/Java_virtual_machine
https://en.wikipedia.org/wiki/Hypervisor
虚拟机