gpt4 book ai didi

clojure - 为什么从 Leiningen 运行任何 Java/Clojure 程序时速度都会变慢?

转载 作者:行者123 更新时间:2023-12-02 10:19:01 33 4
gpt4 key购买 nike

在对 Clojure 应用程序进行基准测试并试图确定性能问题时,我注意到了这种奇怪的行为:即使整个程序都是用 Java 编写的,当从 Leiningen 启动时,速度似乎也显着下降。

假设我有这个 Java 程序:

public class Foo {
public static void main(String[] args) throws Exception {
for (int i = 0; i < 10; i++)
run();
}

public static void run() {
final long start = System.nanoTime();

Random r = new Random();
double x = 0;
for(int i=0; i<50000000; i++)
x += r.nextDouble();

final long time = TimeUnit.MILLISECONDS.convert(System.nanoTime() - start, TimeUnit.NANOSECONDS);
System.out.println("time (ms): " + time + " total: " + x);
}
}

当我简单地运行该程序时,执行时间(每次运行)约为 1 秒。但是,当我像这样从 leiningen 运行它时:

lein run -m Foo

我的运行时间约为2s! Clojure/Leiningen 是如何使整个 Java 程序的速度减慢这么多的?我做错了什么?

我尝试检查两次运行中的系统属性,但找不到任何明显的东西(例如不同的 JIT 设置)。在这两种情况下,我都使用 Java 7 和服务器编译器。

编辑:我不知道为什么这个问题被否决了。我并不反对 Clojure。相反,我喜欢 Clojure,并且会使用它。我只是遇到了这个严重的性能问题,我绝对必须解决它。

更新:运行lein Tampoline解决了这个问题! (虽然我不知道为什么)我更新了问题以反射(reflect)这确实是 Leiningen 问题,而不是 Clojure 问题。

另一个更新:任何 Clojure 代码也会发生这种情况。在没有 Trampoline 的情况下运行会使代码速度减慢多达 5 倍。

最佳答案

leiningen 的创建者意识到了这一点,并彻底解释了为什么会这样以及您可以对此采取哪些措施。

https://github.com/technomancy/leiningen/wiki/Faster

相关问题: Why is leiningen so slow when it starts?

关于clojure - 为什么从 Leiningen 运行任何 Java/Clojure 程序时速度都会变慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16080787/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com