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

Jvm Java虚拟机如何在没有虚拟化支持的系统上工作?,jvm,Jvm,如果虚拟化必须支持硬件,那么Java虚拟机如何在不支持虚拟化的机器上运行?或者JVM不是虚拟机?JVM是一个虚拟机,但它不需要操作系统的任何额外支持。JVM不是虚拟化特定CPU的指令,而是执行java字节码。JVM与VirtualBox或VMWare虚拟机的虚拟意义不同。它是一台实现Java字节码的“机器”,而不是实际硬件的虚拟化版本 艺术术语“虚拟机”是很久以前为以下场景创造的: 制作一台电脑,就像Knuth的混音 编写一个实现组合计算机的计算机程序 运行程序 当这个虚拟机运行时,它是一个完全

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

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

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

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

  • 制作一台电脑,就像Knuth的混音
  • 编写一个实现组合计算机的计算机程序
  • 运行程序
  • 当这个虚拟机运行时,它是一个完全普通的程序,完全以用户模式运行。它不需要硬件或操作系统的特殊帮助就可以正常工作。JVM尤其如此,因为Java字节码不处理低级硬件I/O或其他难以模拟的事情

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


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

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


    JVM与普通VM一样,模拟指令的执行,但在JVM的情况下,模拟的指令是Java指令,在VM的情况下,它们是硬件指令,与在同一硬件上运行的操作系统一样。

    是的,JVM访问硬件,但是,这就是安装MAC或WINDOWS JVM的原因,因为指令由JVM翻译,并根据JVM的安装进行操作,例如,MAC上的“打开文件”对话框打开MAC对话框,WINDOWS JVM打开WINDOWS对话框

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

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

    让我在这里阻止你:-)

    JVM(软件虚拟化)和(例如)VMWare VM(硬件辅助虚拟化)在概念上存在差异

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

    VMWare和其他经过速度优化的VMM依赖于硬件支持。换句话说,他们在硬件上运行,就好像他们完全可以访问硬件一样,只有当他们试图做一些他们不应该做的事情时,操作系统才会捕捉到这种尝试并伪造它


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

    应该注意的是,没有任何规定规定JVM不(必须)具有硬件虚拟化访问。也有一些值得注意的例外,但被回答的海报暗示,很少有本机运行Java字节码的CP存在。也许有一天,Java字节码HAL或TIMI会很常见,将JVM放入与正式硬件虚拟化相同的类中?

    但是我们可以从Java访问硬件,所以JVM必须虚拟化硬件。不,JVM能够访问硬件,因为JVM运行的操作系统,允许。纸张和表格是硬件=PJava不提供对任何硬件的直接访问,甚至不提供对系统处理器的直接访问。JIT将Java字节码转换为直接访问的本机代码,但由于JIT可以添加使本机代码自我可视化的代码,因此不需要硬件支持。这类似于半虚拟化的工作方式,当您运行用于虚拟化的操作系统时,您也不需要硬件虚拟化。