在对Clojure应用进行基准测试并试图确定性能问题时,我注意到了这种特殊的行为:即使整个程序是用Java编写的,当从莱宁根启动时,它似乎会经历显著的减速。
假设我有这个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);
}
}
当我简单地运行程序时,执行时间(每次run
)大约为1s。但是,当我从leiningen运行它时,就像这样:
lein run -m Foo
我得到大约2秒的运行时间!Clojure/Leiningen是如何将一个完整的Java程序的速度降低这么多的?我做错了什么?
我试着在两次运行中检查系统属性,但没有发现任何明显的问题(比如不同的JIT设置)。在这两种情况下,我都将Java7与服务器编译器一起使用。
编辑:我不知道为什么这个问题被否决了。我不反对Clojure。相反,我喜欢Clojure,我会用它。我只是有一个严重的性能问题,我绝对必须解决。
更新:运行lein trampoline
解决了这个问题!(尽管我不知道为什么)我更新了这个问题,以反映这确实是一个莱宁根问题,而不是Clojure问题。
另一个更新:这也适用于任何Clojure代码。在没有蹦床的情况下运行会使代码速度降低5倍。
莱宁根大约需要一秒钟的时间启动。
莱宁根的创造者意识到了这一点,并给出了一个彻底的解释,为什么会这样,以及你能对此做些什么。
https://github.com/technomancy/leiningen/wiki/Faster
相关问题:为什么leiningen在启动时如此缓慢?
我在pyplay上做了一个Tamagotchi项目,在这个早期阶段,程序运行非常缓慢。你对原因有什么提示吗?还有,有没有办法加快速度? 到目前为止,这是我的代码:
我试图从我的Java程序中读取一个充当数据库的. txt文件。在通过TextEdit和使用FileWriter类运行程序之前,我已经写入了该文件Java但是在运行这些代码行后,程序仍然显示一个空数组。这是唯一造成问题的地方,当我使用ArrayList作为临时数据库时,我代码的其余部分(此处未显示)运行良好。有人能帮我找出为什么. txt文件总是空的吗?
我是clojure的新手,来自R,我想和白炽灯一起工作。 基本问题:我如何运行它? 我正在运行Leiningen 2.3。在Java1.7上运行。0_65 64位Debian机器上的OpenJDK 64位服务器虚拟机。 project.clj文件[来自Eric Rochester的书:Clojure Data Analysis Cookbook]中安装了以下依赖项。 这本书没有说什么,但在这里有解
问题内容: 据说Golang是 编译 语言,但它是什么意思由 编译 ?如果golang应用程序已编译为机器代码,为什么我不能只分发二进制文件(当然是在相应的arch和平台上)而不是分发东西? 问题答案: 编译二进制文件后, 可以 将其分发到具有相同体系结构的计算机上。 等只是编译所必需的。
本文向大家介绍什么情况会导致 kafka 运行变慢?相关面试题,主要包含被问及什么情况会导致 kafka 运行变慢?时的应答技巧和注意事项,需要的朋友参考一下 cpu 性能瓶颈 磁盘读写瓶颈 网络瓶颈
所以我超级兴奋,我终于想出了这个程序,然后砰的一声启动它=空白屏幕。我在这里调用一个空白窗格,而其他信息没有填充吗?它是在屏幕外填充的吗?出于某种原因,JavaFX真的让我动心了。如果有人也有什么好的地方去读它。(我知道谷歌很管用,我找到的很多网站/地方都不适合我。