Rad*_*nsa 17 java aot java-9 java-aot jep
我正在尝试使用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在多个库中找到相同类时的行为.
剥离重复是否可能?大/多库项目的推荐方法是什么?
| 归档时间: |
|
| 查看次数: |
319 次 |
| 最近记录: |