如果没有虚拟化支持,Java虚拟机如何在系统上运行?

时间:2009-12-30 02:59:29

标签: jvm

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

6 个答案:

答案 0 :(得分:11)

JVM与VirtualBox或VMWare虚拟机的虚拟性不同。它是一个实现Java字节码的“机器”,而不是实际硬件的虚拟化版本。

在很久以前,为以下场景创造了术语“虚拟机”:

  1. 组成一台计算机,如Knuth的MIX。
  2. 编写一个实现虚拟计算机的计算机程序。
  3. 运行程序
  4. 当这个虚拟机运行时,它是一个完全普通的程序,完全在用户模式下运行。它不需要硬件或操作系统的特殊帮助就能很好地工作。对于JVM尤其如此,因为Java字节代码不处理低级硬件I / O或其他难以模拟的事物。

    后来,在历史上,(选择一个特定的实例),IBM发明了VM / 370。 VM / 370使用术语“虚拟机”的另一种含义。在后面的意义上,硬件和操作系统合作允许单个物理机器托管(或多或少)相同架构的多个虚拟实例,其中写入整个操作系统的多个副本好像他们在或多或少的裸硬件上运行。后来,X86的设计具有促进这一点的功能。

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

答案 1 :(得分:3)

  

如果虚拟化必须提供硬件支持,......

让我在那里阻止你: - )

JVM(软件虚拟化)与(例如)VMWare VM(硬件辅助虚拟化)之间的概念存在差异。

JVM(和其他基于软件的VMM,例如那些允许在Solaris硬件上模拟x86的VMM - 我认为Bochs和可能的DosBox属于这一类)与任何其他应用程序一样运行,使用操作系统获取访问权限硬件,或纯粹用软件模拟自己的硬件。

VMWare以及针对速度优化的其他VMM依赖于硬件支持。换句话说,它们在硬件上运行,好像它们可以完全访问硬件一样,只有当它们尝试做某些事情时,操作系统才会捕获该尝试并伪造它。

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

JVM与常规VM一样模拟指令的执行,但在JVM的情况下,模拟的指令是Java指令,而在VM的情况下,它们是硬件指令,因为它将由运行的OS执行在相同的硬件上。

答案 4 :(得分:1)

是的,JVM确实可以访问硬件,但这就是安装MAC或WINDOWS JVM的原因,因为JVM会转换指令并根据JVM的安装情况采取措施,例如,mac上的打开文件对话框打开mac对话框和Windows JVM打开windows对话框。

因此它不是由系统虚拟化,而是由您安装的JVM虚拟化字节码。它基本上就像一个应用程序读取某些东西(字节码)并执行某些操作(访问硬件或其他东西)。

答案 5 :(得分:0)

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