Java虚拟机真的是一个与我的VMWare或Parallels文件同样意义上的虚拟机吗?
答案 0 :(得分:29)
没有
VMWare和其他实际虚拟化机器的硬件。在VMWare容器(或Parallels或Windows的虚拟化容器或Bochs或......)内运行的操作系统具有在虚拟化容器内运行的不同程度的意识。在VMWare中,操作系统不知道它在虚拟容器中运行。虽然通常安装专门的驱动程序(最重要的是视频)以防止出现性能问题,但操作系统根本没有修改。其他一些虚拟机不进行全硬件虚拟化,而是要求容器内的操作系统对容器进行特殊调用,而不是常规硬件调用。
JVM根本就不是虚拟机。除了处理器之外,没有其他硬件被虚拟化。 JVM本质上是一个虚拟化的CPU加上与C ++或任何其他面向对象语言一起包含的相同类型的运行时,以及垃圾收集和其他必需品。此外,当然,Java类文件(和JAR文件等)不是机器代码,而是中间字节代码。因此,JVM必须在运行时编译或解释类文件(无论是否包含在JAR文件中),并且能够在运行时动态加载和查找新代码。
JVM称为虚拟机,因为JVM定义定义了抽象机器。这包括寄存器,堆栈等,Java源代码编译的字节代码实际上是该虚拟机的机器代码。然后,JVM将此字节代码解释或编译为本机机器指令。
差别在于JVM是虚拟化的处理器,其他虚拟机是虚拟化计算机(包括视频卡,网络和其他外部设备和硬件寄存器) )。
答案 1 :(得分:7)
没有。系统虚拟机和进程虚拟机之间存在差异。 JVM是一个进程虚拟机,而VMWare和那种类型是系统虚拟机。有关更多信息,请参阅wikipedia entry。
就并行虚拟机而言,上述条目表明
PVM(并行虚拟机)不是 严格的虚拟机,作为 在顶部运行的应用程序仍然有 访问所有OS服务,并且是 因此不限于系统 模型由“VM”提供。
答案 2 :(得分:2)
Jeanna Matthews等人在“运行Xen:虚拟化艺术动手指南”中的区别得到了很好的总结。 (Amazon)。 VMWare是完全虚拟化的一个示例,旨在虚拟化物理硬件架构,以便不同的未修改的客户操作系统可以坐在上面。 Java虚拟机就是他们称之为应用程序虚拟化的一个例子,其中“应用程序在虚拟执行环境中运行,为跨平台执行提供标准API并管理应用程序对本地资源的消耗。” (第13页)
在这两种情况下,您都拥有一个软件运行的虚拟化层。 JVM运行Java应用程序,而VMWare运行完整的操作系统。 VMWare虚拟化过去始终表示为物理硬件的计算机。 JVM虚拟化可以在物理硬件中表达的计算机,但几乎总是不会(但请参阅hardware JVMs)。