I compiled a simple class using the Java 9 Ahead-Of-Time Compiler jaotc
using the following command:
javac Test.java
jaotc Test.class
This produces a file named unnammed.so
. How do I run the compiled program? Do I need to write a bootstrap program to link with the .so file?
After executing an AOT compilation, you need to specify generated AOT library during application execution:
java -XX:AOTLibrary=./Test.so Test
You should also compile java.base
to gain real improvement, performance wise:
jaotc --output libjava.base.so --module java.base
Note that the same java runtime configuration should be used during AOT compilation and execution.
For Example:
jaotc -J-XX:+UseParallelGC -J-XX:-UseCompressedOops --output libTest.so Test.class
java -XX:+UseParallelGC -XX:-UseCompressedOops -XX:AOTLibrary=./libTest.so Test
Take a look at this, for more information.
You should have a look at JEP 295, which describes AOT compilation in JDK 9, http://openjdk.java.net/jeps/295. You need to use the --XX::AOTLibrary command line flag.
To execute your app:
java -XX::AOTLibrary=./unnamed.so,./libjava.base.so Test
You will obviously have to copy the libjava.base.so file from the JDK 9 distribution or change the path to where it is.
When compiling you should also use the --output flag to jaotc so you don't get 'unnamed.so'.