【发布时间】:2011-01-14 18:44:00
【问题描述】:
我试图了解 cake 是如何实现其多 JVM 方法的。在高层次上,我认为 cake 的工作方式类似于 nailgun,其中只有一个 JVM 实例(一个 JVM 进程),不同项目的新“JVM”实际上只是在新的类加载器中评估的 clojure/jars(以及不同的 jar 依赖项),在我看来这不是一个新的 JVM 实例。但是,What's the difference between Cake and Leiningen? 暗示存在多个 JVM(一个用于蛋糕,* 用于项目),而不仅仅是一个 JVM 实例。
如果创建了新的 JVM 实例,加速从何而来?根据我的理解,我认为启动一个新的 JVM 意味着创建一个新的 JVM 进程,它会产生与往常一样的启动开销。
如果没有,如何添加原生依赖项?据我了解,JVM 只知道运行时之前传递的命令行参数的本机依赖关系。我知道如何规避这一点的唯一方法是使用下面列出的 Sun/Oracle JVM 实现特定的 hack。
(let [clazz java.lang.ClassLoader
field (.getDeclaredField clazz "sys_paths")]
(.setAccessible field true)
(.set field clazz nil)
(System/setProperty "java.library.path" (apply str (interpose ";" native-paths))))
【问题讨论】: