代码之家  ›  专栏  ›  技术社区  ›  Xinus

Java虚拟机如何在没有虚拟化支持的情况下工作在系统上?

jvm
  •  3
  • Xinus  · 技术社区  · 15 年前

    如果硬件支持是虚拟化必须的,那么Java虚拟机如何在没有虚拟化支持的情况下运行在机器上?或者JVM不是虚拟机?

    6 回复  |  直到 15 年前
        1
  •  11
  •   bmargulies    15 年前

    jvm与virtualbox或vmware虚拟机的意义不同。它是实现Java字节码的“机器”,而不是实际硬件的虚拟化版本。

    艺术术语“虚拟机”是很久以前为以下场景创造的:

    1. 组成一台电脑,就像Knuth的混合。
    2. 编写一个计算机程序来实现组成的计算机。
    3. 运行程序

    当这个虚拟机运行时,它是一个完全普通的程序,完全以用户模式运行。它不需要硬件或操作系统的特殊帮助就可以正常工作。JVM尤其如此,因为Java字节码不处理低级硬件I/O或其他难以模拟的事物。

    后来,在历史上(为了选择一个特定的实例),IBM发明了VM/370。VM/370使用了术语“虚拟机”的另一种含义。在稍后的意义上,硬件和操作系统协作,允许单个物理机承载(或多或少)的多个虚拟实例。 相同的 一种体系结构,在这种体系结构中,整个操作系统的多个副本被写入,就好像它们在或多或少的裸硬件上运行一样。后来,x86被设计成具有促进这一点的功能。

    所以,是的,任何虚拟机都在利用一些物理硬件,除非你用一张纸绕桌子来实现它(PaceJohnSearle)。但是,当虚拟机与它运行的机器没有任何相似之处时,就不需要操作系统和硬件的特殊帮助,也不需要像VM/370或VMware这样复杂的东西。

        2
  •  3
  •   paxdiablo    15 年前

    如果虚拟化必须有硬件支持,…

    让我在那儿拦住你:—)

    在概念上,JVM(软件虚拟化)和(例如)VMware VM(硬件辅助虚拟化)之间存在差异。

    JVM(以及其他基于软件的虚拟机,例如允许在Solaris硬件上模拟x86的虚拟机——我认为Bochs和Dosbox可能属于这一类)与其他任何应用程序一样运行,使用操作系统访问硬件,或仅在软件中模拟自己的硬件。

    vmware和其他针对速度进行了优化的vmms依赖于硬件支持。换言之,他们在硬件上运行,就好像他们完全可以访问硬件一样,只有当他们试图做一些不应该做的事情时,操作系统才会捕获并伪造这种尝试。

    这就是为什么vmware的运行速度比纯软件模拟器快得多。这是因为,在绝大多数情况下,它实际上是在真正的硬件上运行的。

        3
  •  1
  •   mopoke    15 年前

    JVM是一个虚拟机,但它不需要操作系统提供任何额外的支持。它不是为特定CPU虚拟化指令,而是执行Java字节码。

        4
  •  1
  •   GrayWizardx    15 年前

    JVM是一个运行Java的虚拟机,换句话说,它模拟了一个能够运行Java的机器。这是一个令人困惑的名称选择,但它来自“机器”的一般含义,而不是更常见的虚拟机含义。

    JVM像一个规则的VM仿真指令的执行,但是在JVM的情况下,被仿真的指令是Java指令,而在VM的情况下,它们是由在同一硬件上运行的OS执行的硬件指令。

        5
  •  1
  •   Faisal Abid    15 年前

    是的,jvm确实访问硬件,但是这就是为什么安装Mac或Windows jvm的原因,因为指令由jvm翻译并根据安装的jvm进行操作,例如,Mac上的“打开文件”对话框打开Mac对话框,Windows jvm打开Windows对话框。

    所以它不是由系统虚拟化的,而是由您安装的JVM虚拟化的字节码。它基本上就像一个应用程序,它读取一些东西(字节码)并做一些事情(访问硬件或其他东西)。

        6
  •  0
  •   Jé Queue    15 年前

    应该注意的是,没有任何规定规定JVM (必须)具有硬件虚拟化访问权限。有明显的例外,但回答的海报暗示,很少有CPS本身运行Java字节码存在。也许有一天,Java字节码HAL或TIMI会很常见,将JVM与形式化的HW虚拟化放到同一个类中?