当 运行 JVM 兼容程序(Java、Kotlin、Scala e.t.c)时,如何更改 JVM 实现(例如 HotSpot、GraalVM、OpenJ9 e.t.c。)?

How can I change JVM implementation (e.g. HotSpot, GraalVM, OpenJ9 e.t.c.) when running JVM-compatible programs (Java, Kotlin, Scala e.t.c.)?

我需要更改JVM 实现来比较哪个更适合我需要满足的要求。我怎样才能做到这一点?特别是在 GNU/Linux 或 MacOS 上。当 运行 java 程序使用 java 控制台命令时,有没有办法设置 JVM 实现?或者我可能需要更改一些包含 JVM 实现的 lib 文件? 帮助将不胜感激。

当您的机器上有多个 JVM 时,您可以在执行 java 命令时简单地限定您想要的那个。

至少 Windows 上的 Oracle JVM 是这样工作的。我没有尝试过 Linux,也没有尝试过其他任何一个,但是 JVM 不需要在 PATH 上,你可以只限定你想要的那个。

有关其工作原理的示例,请参阅 my answer to another question

在一台机器上有多个 JVM 实现很容易,您只需将每个实现放在自己的目录中即可。就个人而言,我在 Linux 上使用 /opt,但您可以选择放置它们的位置。

然后,您需要做的就是更改 PATH 环境变量,以确保列表中第一个具有 java 可执行文件的目录是您要使用的目录,例如

PATH=/opt/JDK8/bin:$PATH

您还可以设置 JAVA_HOME 环境变量,但这不会直接影响使用哪个 JVM,它只是其他应用程序使用的约定(如 Tomcat)。通过这样做,您可以设置一次 PATH,

PATH=$JAVA_HOME/bin:$PATH

然后只需更改 JAVA_HOME 变量以反映您要使用哪个版本的 Java。

这适用于 Linux 和 Mac(基于 UNIX OS)。