编译JVM

时间:2018-08-28 03:55:41

标签: java jvm

是否可以将JVM编译为某些特定的ISA?

我试图了解JVM的建议。我现在所拥有的一切,都是一个虚拟机,它可以在任何ISA上模拟ISA,因此,它只是在SO上运行的另一种软件。但是必须将所有软件编译到目标ISA,才能获得正确的说明。

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

1 个答案:

答案 0 :(得分:0)

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

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

但是实际上,JVM具有对本机代码进行即时编译的功能,以及除用于实现的编程语言的标准功能(如C或C ++)之外,还需要与基础体系结构进行交互的功能。因此,要支持新的体系结构,仅重新编译JVM源代码是不够的,还需要为新的ISA实现新的JIT编译器并提供一些底层组件的专门实现。这适用于广泛使用的HotSpot JVM,它是JDK和JRE的一部分,可以从Oracle’s website下载。您可能会注意到,必须为系统选择正确的版本(如果支持)。

另一种可能的策略是用Java本身实现JVM。为了能够在特定平台上运行它,至少它的某些部分必须提前编译为本地代码,这需要合适的AOT编译器。如果该特定项目无论如何都具有对本机代码的编译功能(作为JIT编译器的一部分),则利用它来实现AOT编译器就不会太牵强。这样的项目将独立于另一种语言的平台支持,但是当然,它仍然需要实现和维护特定的代码以支持特定的体系结构。这适用于the GraalVM project的一部分Substrate JVM。