如何在 Openj9 中使用 AOT 编译器?

How to use AOT compiler in Openj9?

我已经知道Openj9中有一个"dynamic AOT", 其中 Openjdk9 有一个 AOT 编译器 (jaotc) 来将字节码编译成共享库。

但 Openj9 没有像 jaotc 这样的程序,它使用 "shared classes" 来存储 JITed 代码,预计其他 JVM 将使用它来加快它们的启动时间。

我有以下问题:

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

如有指教,将不胜感激。谢谢!

你是对的,要在 OpenJ9 上启用 AOT,必须启用 -Xshare类 选项。

  1. How do I make sure whether Openj9 JVM use JITed code produced by another JVM? (In openjdk9, there is an option "-XX:+PrintAOT" to observe)

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

Stored AOT code for ROMMethod 0x000000000FFAE2C8 in shared cache.

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

Found AOT code for ROMMethod 0x000000001003C178 in shared cache.        
  1. How to use the AOT of Openj9? I execute a program with option "-Xshareclasses", and just execute this program again?

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

  1. Is there any document about Openj9 AOT?

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

The AOT Compiler

-Xshareclasses

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