Java 编译JVM

Java 编译JVM,java,jvm,Java,Jvm,是否可以将JVM编译成特定的ISA 我试图理解JVM的建议。我现在看到的一切,都是一个虚拟机,它在任何ISA上模拟ISA,因此,它只是在SO上运行的另一个软件。但是所有的软件都必须编译到目标ISA,才能正确地实现指令 那么,JVM是否为每个新ISA重新编译?或者它有一种特定的方法来实现这一点并保持可移植性?有不止一个JVM,因此,关于“JVM”的问题没有简单的答案 原则上,可以用一种便携式编程语言实现JVM,该语言具有一个仅用于字节码执行的简单解释器。在这种情况下,可以支持用于实现JVM的语言所

是否可以将JVM编译成特定的ISA

我试图理解JVM的建议。我现在看到的一切,都是一个虚拟机,它在任何ISA上模拟ISA,因此,它只是在SO上运行的另一个软件。但是所有的软件都必须编译到目标ISA,才能正确地实现指令


那么,JVM是否为每个新ISA重新编译?或者它有一种特定的方法来实现这一点并保持可移植性?

有不止一个JVM,因此,关于“JVM”的问题没有简单的答案

原则上,可以用一种便携式编程语言实现JVM,该语言具有一个仅用于字节码执行的简单解释器。在这种情况下,可以支持用于实现JVM的语言所支持的所有体系结构。如果该语言需要编译特定体系结构的源代码(这对于通常用于此类任务的语言来说是正确的),那么必须为每个受支持的ISA重新编译JVM。通常,您还需要为每个受支持的操作系统重新编译它,即使是相同的ISA

但在实践中,JVM的特性是对本机代码进行即时编译,以及需要与底层架构交互的特性,这些特性超出了用于实现的编程语言(如C或C++)的标准特性。因此,要支持新的体系结构,仅重新编译JVM源代码是不够的,还需要为新的ISA实现一个新的JIT编译器,并提供一些低级组件的专门实现。这适用于广泛使用的HotSpot JVM,它是您可以从中下载的JDK和JRE的一部分。您可能会注意到,您必须为您的系统选择正确的版本(如果支持)


另一种可能的策略是用Java本身实现JVM。为了能够在特定平台上运行它,至少它的某些部分必须提前编译为本机代码,这需要合适的AOT编译器。如果特定项目的特点是编译为本机代码(作为JIT编译器的一部分),那么利用它来实现AOT编译器并不太牵强。这样的项目将独立于另一种语言的平台支持,但当然,它仍然需要实现和维护特定的代码来支持特定的体系结构。这适用于底层JVM,它是JVM的一部分。

JVM与其他任何程序一样只是一个程序。它被编译成各自体系结构的机器代码,然后JVM在安装了JVM的任何系统上运行Java字节码。