【问题标题】:Does Java 9 include Graal?Java 9 是否包含 Graal?
【发布时间】:2018-01-14 18:31:35
【问题描述】:

我正在阅读JEP 317。它说 Graal(一个新的实验性的基于 Java 的 JIT 编译器)将成为 JDK 10 的一部分,但是它说它已经在 J​​DK 9 中可用。那么,JEP 317 的意义何在? Java 9 是否包含 Graal?

【问题讨论】:

  • "那么,JEP 317 的意义何在?" - 我认为这个问题最好在 (one of the) openjdk mailing lists 上提出。从 JEP 看来,Graal 最初是作为 AOT 编译器的(一部分)开发的,因此与 JDK 9 一起发布。JEP 建议也将 Graal 用作实验性 JIT 编译器。
  • @Turing85 但是-XX:+UseJVMCICompiler 选项已经在 J​​DK 9 中可用,这与 AOT 无关。

标签: java java-9 graalvm java-10


【解决方案1】:

根据我的一份备忘录,在 linux-x64(开箱即用)上要在 JDK 9 上使用 Graal,您可以使用以下方法启用它:

-XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI -XX:+UseJVMCICompiler

来源Tweet from Chris.


如果您明确愿意使用 org.graalvm.* 类,则它们不会出现在 JDK-9 构建中,除了 Linux distribution hereJEP-317#Experimental Java-Based JIT Compiler 的状态也显示类似的内容。

Status    Integrated
Scope JDK
Release   10

更新:- 要在 JDK10 上使用 Graal,可以使用以下命令启用它:-

-XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI -XX:+UseJVMCICompiler -Djvmci.Compiler=graal

【讨论】:

  • 很好的发现!有没有地方可以阅读编译器之间的实际差异?或者至少它有什么不同?
  • @ZhekaKozlov 更正我自己,jdk.aotjdk.internal.vm.compiler 模块打包在 Linux 64 位版本中,适用于 JDK 版本 9.0.1 而不是 macOS。也更新了答案中二进制文件的链接。 oracle.com/technetwork/java/javase/downloads/…。此外,它们还在 JDK10 的早期访问版本中。
  • @nullpointer 你是对的。我不认为不同的操作系统可以有不同的模块集。
【解决方案2】:

Graal 包含在 9 中,但使用方式不同。

在 Java 9 中,Graal 用作 AOT(Ahead of time)编译器,允许用户使用 jaotc 工具创建手动编译的 .so 库。

这些库可以在 JVM 启动时加载并直接使用。

详细说明可以在相关的Java 9 JEP中找到:http://openjdk.java.net/jeps/295

在 Java 10 Graal 中,如 JEP 317 中所述,可用作 JIT 编译器而不是 HotSpot。

这意味着类将在 JVM 中“即时”编译,而不需要事先手动编译。

【讨论】:

  • 在 Java 9 中,Graal 也可以用作 JIT 编译器(仅在 Linux 上)
猜你喜欢
  • 1970-01-01
  • 2017-09-21
  • 2023-03-19
  • 1970-01-01
  • 2014-08-21
  • 1970-01-01
  • 2017-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多