我使用以下命令使用Java 9 Ahead-Of-Time Compiler编译了一个简单的类:jaotc
javac Test.java
jaotc Test.class
这会生成一个名为unnammed.so
. 如何运行编译好的程序?我是否需要编写引导程序来链接 .so 文件?
执行 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
看看这个,了解更多信息。
你应该看看 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”。