如何运行使用jaotc编译的类?

10

我使用以下命令,使用jaotcJava 9 Ahead-Of-Time编译器编译了一个简单的类:

javac Test.java
jaotc Test.class

这将生成一个名为unnammed.so的文件。我该如何运行编译后的程序?我需要编写一个引导程序来链接.so文件吗?


3
你提供的链接页面(编译器的页面)中有一个名为“生成和使用java.base模块的AOT库的步骤”的部分 - 你尝试过将最后一部分进行调整吗?例如: java -XX:AOTLibrary=./unnamed.so Test - UnholySheep
2个回答

15
执行 AOT 编译后,您需要在应用程序执行期间指定生成的 AOT 库:
java -XX:AOTLibrary=./Test.so Test

你还应该编译java.base以获得真正的性能提升:

jaotc --output libjava.base.so --module java.base

请注意,在AOT编译和执行期间应使用相同的Java运行时配置。

例如:

jaotc -J-XX:+UseParallelGC -J-XX:-UseCompressedOops --output libTest.so Test.class 
java -XX:+UseParallelGC -XX:-UseCompressedOops -XX:AOTLibrary=./libTest.so Test

查看此链接,获取更多信息。


4
我应该补充一点,你也需要编译java.base,因为只编译Test类不会带来任何性能提升。 - ZhekaKozlov
值得一提的是,ArgOne应该是要运行的Java类名。 - user11171

5
你应该查看JEP 295,它描述了JDK 9中的AOT编译,http://openjdk.java.net/jeps/295。你需要使用--XX::AOTLibrary命令行标志。
要执行您的应用程序:
java -XX::AOTLibrary=./unnamed.so,./libjava.base.so Test

你显然需要从JDK 9分发中复制libjava.base.so文件,或者更改路径到它所在的位置。

编译时,你还应该使用--output标志来指定jaotc输出的文件名,以免出现“unnamed.so”的情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接