我试过它,对启动时间有明显的改善。然而,由于 Clojure 的典型使用和消费方式,使用 AppCDS 的用户体验并不理想。AppCDS 需要预先创建一个等于存档的类列表,并确保生成存档时使用的类路径是运行时代码路径的前缀。
在大多数使用 Clojure 的情况下,尤其是开发时间这个最关键的时期,没有支持选择性确定正确的共享存档(这取决于 Clojure 版本),也没有确保它是类路径的前缀。
此外,在大多数启动速度较慢的Clojure应用程序中,它们之所以速度慢,是因为它们需要读取和编译大量的`.clj`文件(AppCDS不适用),或者它们需要加载AOT'ed(预先编译)的类(AppCDS适用,但只能使用一个存档,因此使用预构建的Clojure存档将防止其工作)。请注意,与AOT'ed代码一起使用通常与开发中的做法相矛盾(通常不是AOT编译或动态重新加载)。
如果您确实想在您的应用程序中使用它,可以对uberjar进行AOT编译,然后使用它生成AppCDS存档并使用它。我怀疑您会看到启动时间的大幅提升。然而,如上所述,这不太可能适合开发(再次强调,这是人们最关心的地方)。
但是,正在进行JEP工作,可能使AppCDS更具灵活性,如https://openjdk.java.net/jeps/350。所以适用性可能最终会改变!