标签: java-aot

JEP 295 AOT:多次编译的对象

我正在尝试使用JDK9的新AOT功能编译应用程序服务器,并且面临着许多挑战.

应用程序服务器包含~180 MB的罐子; 编译一起溢出整数,所以我试图将每个模块编译成一个(.so)库.这些模块与其他模块有依赖关系,所以我不得不使用-J-cp -J依赖项将它们放在classpath上.这导致了4.4 GB的libs - 因为AOT应该加速服务器启动,你可以想象从磁盘加载它并没有真正帮助.(可以剥离那些调试信息的库,但我们仍然在讨论与罐子相比规模增长的顺序.)

我很沮丧,jaotc实际上类加载编译的类,它触发静态构造函数(这有时会给我错误).此外,编译器无法处理缺少的引用类,有时这只是一个运行时依赖 - 即使没有它们,服务器也可以正常运行.所以我必须提供空的模拟类来满足编译器.

但是,当使用AOT跟踪(-Xlog:aot+class+load=trace:file=/tmp/aot.txt:none而不是stdout -XX:+PrintAOT)运行服务器时,我发现libs也包含一些依赖项:

found  java.lang.Object  in  /home/user/aot/common/libjava.base-coop.so for classloader 0x2b5745e6ac80 tid=0x00002b574401e800
found  java.lang.Object  in  /home/user/aot/appserver/lib/libcom.example.module1.so for classloader 0x2b5745e6ac80 tid=0x00002b574401e800
found  java.lang.Object  in  /home/user/aot/appserver/lib/libcom.example.module2.so for classloader 0x2b5745e6ac80 tid=0x00002b574401e800
Run Code Online (Sandbox Code Playgroud)

这证实了我的疑问,lib只包含了我给编译器编译的jar中的代码,但至少包含了超类的代码.我也不确定JVM在多个库中找到相同类时的行为.

剥离重复是否可能?大/多库项目的推荐方法是什么?

java aot java-9 java-aot jep

17
推荐指数
1
解决办法
319
查看次数

Java 9中是否提供了Ahead-of-Time编译?

根据JEP 295

任何JDK模块,类或用户代码的AOT编译都是实验性的,在JDK 9中不受支持.

要使用AOTed java.base模块,用户必须编译模块并将生成的AOT库复制到JDK安装目录中,或在java命令行中指定它.

我对上面的语句感到困惑,如果JDK 9不支持AOT那么我们如何使用AOT编译模块?

我的第二个问题是,为什么AOT不支持JDK 9,如果它比JIT有许多优势?

java compilation java-9 java-aot

5
推荐指数
1
解决办法
3503
查看次数

标签 统计

java ×2

java-9 ×2

java-aot ×2

aot ×1

compilation ×1

jep ×1