我已经试了,它确实可以明显提高启动速度。然而,考虑到 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。所以适用性可能会最终发生变化!