可以将JVM编译成某种特定的ISA吗?
我正在尝试理解JVM的提议。我现在所做的一切,就是一个在任何ISA上模拟ISA的虚拟机,因此,它只是在SO上运行的另一个软件。但所有的软件都必须编译到目标ISA上,才能实现正确的指令。
那么,每个新的ISA都会重新编译JVM吗?或者它有一种特定的方法来做到这一点并保持可移植性?
发布于 2018-08-29 18:02:39
JVM不止一个,因此,关于“JVM”的问题没有简单的答案。
原则上,可以用一种可移植的编程语言实现JVM,其特点是只有一个简单的解释器来执行字节码。在这种情况下,可以支持用于实现JVM的语言所支持的所有体系结构。如果该语言需要为特定的体系结构编译源代码(这对于通常用于此类任务的语言是正确的),则必须为每个支持的ISA重新编译JVM。通常,您还需要为每个支持的操作系统重新编译它,即使是相同的ISA。
但在实践中,JVM的特性是即时编译到本机代码,以及除了用于实现的编程语言(如C或C++)的标准特性之外,还需要与底层体系结构交互的特性。因此,要支持新的体系结构,仅重新编译JVM源代码是不够的,还需要为新的ISA实现新的JIT编译器,并提供一些低级组件的专门实现。这适用于广泛使用的JDKs,它是可以从Oracle’s website下载的HotSpot和JRE的一部分。您可能会注意到,您必须为您的系统选择正确的版本(如果支持)。
另一种可能的策略是在Java本身中实现JVM。为了能够在特定的平台上运行它,至少它的某些部分必须提前编译成本机代码,这就需要一个合适的AOT编译器。如果特定项目的特点是编译成本机代码(作为JIT编译器的一部分),那么利用它来实现AOT编译器并不太牵强。这样的项目将独立于另一种语言的平台支持,但当然,它仍然需要实现和维护特定的代码来支持特定的体系结构。这适用于底层JVM,它是the GraalVM project的一部分。
https://stackoverflow.com/questions/52049843
复制相似问题