2024 年 Clojure 状态调查中分享您的想法!

欢迎!请参阅关于页面以了解更多关于如何使用本站的信息。

+4
编译器
重标记

我一直在阅读 Oracle 关于 AppCDS 的文档,想知道对于 Clojure 的核心功能,我们能否使用 AppCDS 来创建它们的快照?

https://docs.oracle.com/javase/8/docs/technotes/guides/vm/class-data-sharing.html

感谢,

Sam

1 答案

+3

我已经试了,它确实可以明显提高启动速度。然而,考虑到 Clojure 通常的消耗和使用方式,使用 ergonomics 并不理想。AppCDS 需要预先创建要存档的类列表,并确保用于生成存档的类路径是运行时使用的类路径的子路径。

在目前人们使用 Clojure 的大多数方式中,尤其是在开发时间这一点最为关键时,没有支持选择确定要使用的正确共享存档(这取决于 Clojure 版本),或者确保它是类路径的子路径。

另外,在大多数启动缓慢的 Clojure 应用中,它们之所以缓慢,要么是因为需要读取和编译大量的 clj 文件(AppCDS 不适用),要么是因为需要加载 AOT'ed 类(AppCDS 会适用,但只能使用一个存档,因此使用预构建的 Clojure 存档会防止这种情况)。请注意,与 AOT'ed 代码一起使用通常与开发中要做的事情相矛盾(通常不是 AOT 编译或动态重载)。

如果您确实想在您的应用中使用它,您可以将uberjar进行AOT编译,然后利用它生成AppCDS存档并使用。我怀疑您会在启动时间上看到一个显著的提升。然而,如上所述,这不太可能适合开发(人们最关心的是开发)。

但是,有一些JEP工作正在进行中,可能会使AppCDS更加灵活,例如:https://openjdk.java.net/jeps/350。所以适用性可能会最终发生变化!

发表于
请注意,自Java 10开始,AppCDS不再是商业特性,现已包含在OpenJDK中。
...