问题标签 [java-aot]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4069 浏览

java - Java 9 中是否提供 Ahead-Of-Time 编译?

根据JEP 295

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

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

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

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

0 投票
1 回答
580 浏览

java - JEP 295 AOT:多次编译的对象

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

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

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

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

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

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

0 投票
1 回答
1083 浏览

java - 您可以将 jaotc(Java Ahead-of-Time 编译器)与 jlink(模块组装器/优化器来创建运行时映像)一起使用吗?

这里的目标是:

  1. 创建一个运行时映像,它自己剥离了 JRE(最小化大小)——这就是 jlink 给我们的

  2. 创建本机可执行库而不是使用字节码(改善加载时间并希望消除混淆的需要)——这就是 jaotc 给我们的

但是,没有任何好的文档可以将两者关联起来。似乎有很多矛盾的方式来处理这两个流程。

是否可以使用使用 jaotc 生成的二进制文件的 jlink 构建运行时映像?

0 投票
1 回答
6058 浏览

android - 创建 oat 文件失败

我开发了一个应用程序,旨在让相机应用程序拍照并保存它。

但我的问题是:

有时在拍照并调用我的应用程序后,我的应用程序崩溃了(没有调用 onActivityResult())。

我的应用程序使用 multidex,我无法删除它。即时运行也是启用的。

这是我的代码:

我的应用程序没有记录任何错误,但android OS 记录了这个: