11

我使用以下命令使用Java 9 Ahead-Of-Time Compiler编译了一个简单的类:jaotc

javac Test.java
jaotc Test.class

这会生成一个名为unnammed.so. 如何运行编译好的程序?我是否需要编写引导程序来链接 .so 文件?

4

2 回答 2

16

执行 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

看看这个,了解更多信息。

于 2017-07-25T09:01:36.613 回答
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 文件或将路径更改为它所在的位置。

编译时,您还应该对 jaotc 使用 --output 标志,这样您就不会得到“unnamed.so”。

于 2017-07-25T08:59:17.103 回答