首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JEP 295 AOT:多次编译对象

JEP 295 AOT:多次编译对象
EN

Stack Overflow用户
提问于 2017-10-05 10:02:19
回答 1查看 656关注 0票数 44

我正在尝试编译一个具有JDK9 9的新AOT特性的应用服务器,并面临许多挑战。

appserver由大约180 MB的jars组成,它一起编译溢出整数,所以我尝试将每个模块编译成一个(.so)库。这些模块依赖于其他模块,因此我不得不使用-J-cp -J依赖项将它们放到类路径上。这导致了4.4GB的libs --因为AOT应该加快服务器的启动速度,所以您可以想象从磁盘加载这个文件并没有多大帮助。(可以删除这些库的调试信息,但与jars相比,我们仍然在讨论规模增长的顺序。)

令我相当失望的是,jaotc实际上加载了编译过的类,这会触发静态构造函数(这有时会给我带来错误)。此外,编译器无法处理缺少的引用类,有时这只是一个运行时依赖关系-服务器在没有它们的情况下运行时也没有问题。因此,我必须提供空的模拟类来满足编译器。

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

代码语言:javascript
复制
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

这证实了我的疑虑,即库包含的不仅仅是我给编译器编译的jars中的代码,至少也包含了超类的代码。当JVM在多个库中找到相同的类时,我也不确定JVM的行为。

有可能剥去这些双重性吗?大/多库项目的推荐方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2022-05-11 08:02:11

这个特性已经被JEP410删除了。与AOT相关的代码大部分是在JDK 17中删除的,您不应该使用这个特性。如果您仍然想要这个特性,可以考虑使用GraalVM

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46582922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档