Mat*_*loy 12 jvm clojure leiningen
如果我打电话
lein trampoline repl
Run Code Online (Sandbox Code Playgroud)
Leiningen启动自己的JVM进程,然后为repl启动一个单独的JVM并退出.但是调用默认值
lein repl
Run Code Online (Sandbox Code Playgroud)
留下两个运行的JVM.是否有任何理由保持原始的Leiningen JVM进程运行?为什么不将lein trampoline行为设为默认行为并且每次都退出?
lein help trampoline 状态:
在没有将项目的JVM嵌入Leiningen的情况下运行任务.
计算在给定任务的项目进程中运行的Clojure代码,并允许Leiningen自己的JVM进程在运行之前退出,而不是启动Leiningen的JVM的子进程.
使用它来节省内存或解决stdin问题.
参数:([task-name&args])
所以你可以看到,没有trampoline第二个JVM作为第一个子进程运行.这就是为什么第一个不能退出的原因 - 退出会破坏第二个.
另一方面,trampoline第一个JVM构造一个shell脚本,然后由lein脚本执行以生成第二个JVM.所以在这种情况下,第二个JVM是lein脚本的子代. Clojure婴儿是如何制作的:Leiningen的Trampoline在很多细节上都涵盖了这一点.
至于为什么trampoline不是默认值,我不完全确定.但请记住,并非每个lein命令都运行项目代码,因此每个命令都不需要第二个JVM.
此外,使用可能存在缺点trampoline.例如,看看上面文章中的以下代码行:
# Just don't change :target-path in project.clj, mkay?
TRAMPOLINE_FILE="target/trampolines/$INPUT_CHECKSUM"
Run Code Online (Sandbox Code Playgroud)
对我来说,这意味着,如果有可能的问题:target-path 是在设置project.clj.
| 归档时间: |
|
| 查看次数: |
746 次 |
| 最近记录: |