3

我已经知道 Openj9 中有一个“动态 AOT”,其中 Openjdk9 有一个 AOT 编译器(jaotc)来将字节码编译为共享库。

但是 Openj9 没有 jaotc 之类的程序,它使用“共享类”来存储 JITed 代码,预计其他 JVM 也可以使用它来加快它们的启动时间。

我有以下问题:

  1. 如何确定 Openj9 JVM 是否使用由另一个 JVM 生成的 JITed 代码?(在openjdk9中,有一个选项“-XX:+PrintAOT”可以观察)
  2. 如何使用 Openj9 的 AOT?我使用选项“-Xshareclasses”执行一个程序,然后再次执行该程序?
  3. 有没有关于 Openj9 AOT 的文档?

如果有任何建议,我们将不胜感激。谢谢!

4

1 回答 1

4

您是对的,要在 OpenJ9 上启用 AOT,必须启用 -Xshareclasses 选项。

  1. 如何确定 Openj9 JVM 是否使用由另一个 JVM 生成的 JITed 代码?(在openjdk9中,有一个选项“-XX:+PrintAOT”可以观察)

使用选项-Xshareclasses:verboseAOT。您应该会看到如下输出消息:

Stored AOT code for ROMMethod 0x000000000FFAE2C8 in shared cache.

在随后的运行中,您将看到如下消息:

Found AOT code for ROMMethod 0x000000001003C178 in shared cache.        
  1. 如何使用 Openj9 的 AOT?我使用选项“-Xshareclasses”执行一个程序,然后再次执行该程序?

如果您想在 Java 程序的后续运行中保留和重用 AOT 代码,请运行 with -Xshareclasses:persistent(启用时,'persistent' 子选项在 Linux 和 Windows 平台上是默认的-Xshareclasses)。使用此选项,将在磁盘上创建缓存,该缓存在操作系统重新启动后仍然存在。您还可以选择为共享类缓存提供一个名称(名称=子参数),以区分不同应用程序的共享缓存。

  1. 有没有关于 Openj9 AOT 的文档?

我可以向您指出以下文档:

AOT 编译器

-Xshareclasses

我还将打开一个 github 问题来检查是否有更多关于 AOT 的文档可用或可以创建。

于 2017-09-21T15:19:59.657 回答