【问题标题】:How to use AOT compiler in Openj9?如何在 Openj9 中使用 AOT 编译器?
【发布时间】:2017-09-21 11:58:07
【问题描述】:

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

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

我有以下问题:

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

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

【问题讨论】:

    标签: openj9


    【解决方案1】:

    你说得对,要在 OpenJ9 上启用 AOT,必须启用 -Xshareclasses 选项。

    1. 如何确定 Openj9 JVM 是否使用由 另一个JVM? (在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 代码,请使用 -Xshareclasses:persistent 运行(启用 -Xshareclasses 时,Linux 和 Windows 平台上的“持久”子选项是默认的)。 使用此选项,将在磁盘上创建缓存,该缓存在操作系统重新启动后仍然存在。您还可以选择为您的共享类缓存提供一个名称(名称=子参数),以区分不同应用程序的共享缓存。

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

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

    The AOT Compiler

    -Xshareclasses

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

    【讨论】:

    • P.S.:我打开了这个问题:github.com/eclipse/openj9/issues/97,并指向了 OpenJ9 的正确文档,我已在上面的链接中更新。
    • 这对我帮助很大。谢谢@deesebas!
    • 如果我运行后续的java程序,想要复用AOTed代码,我需要为这个后续程序设置“cacheDir”吗?似乎 AOTed 代码是由 openj9 jvm 生成的,然后在磁盘上创建缓存。所以当后面的程序要重用AOTed代码时,第一个java程序不需要继续执行。我说的对吗?
    • 虽然您可以选择使用 cacheDir 显式指定目录,但默认情况下,共享类缓存是从默认位置创建(并重用)的(例如 Linux 上的 /tmp/javasharedresources)。你是对的,在持久缓存的情况下,共享缓存是在磁盘上创建并持久化的,所以第一个程序不需要继续执行,后续程序就可以重用 AOT 代码。这里有更多信息,希望对您有用! 【课堂资料分享】(ibm.com/support/knowledgecenter/SSYKE2_9.0.0/…)
    • AOT 编译器 IBM 链接已损坏。
    猜你喜欢
    • 2022-10-05
    • 2022-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 2020-01-10
    • 1970-01-01
    • 2018-06-28
    相关资源
    最近更新 更多