Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么任何Java/Clojure程序在从Leiningen运行时都会慢下来?_Clojure_Leiningen - Fatal编程技术网

为什么任何Java/Clojure程序在从Leiningen运行时都会慢下来?

为什么任何Java/Clojure程序在从Leiningen运行时都会慢下来?,clojure,leiningen,Clojure,Leiningen,在对Clojure应用程序进行基准测试并试图确定性能问题时,我注意到了这种奇怪的行为:即使整个程序都是用Java编写的,但从Leiningen启动时,它似乎经历了显著的减速 假设我有这个Java程序: 公共类Foo{ 公共静态void main(字符串[]args)引发异常{ 对于(int i=0;i

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

假设我有这个Java程序:

公共类Foo{
公共静态void main(字符串[]args)引发异常{
对于(int i=0;i<10;i++)
run();
}
公共静态无效运行(){
最终长启动=System.nanoTime();
随机r=新随机();
双x=0;

对于(int i=0;ileiningen,启动大约需要一秒钟。

这可能是由于不同的JIT行为

JIT编译的性能可能受到许多因素的影响,包括:

  • 调用什么启动代码,这将影响JIT统计信息
  • 加载了哪些其他类(例如Random的其他子类),这些类可能会影响编译器优化方法调用调度

    • leiningen的创作者们意识到了这一点,并对为什么会这样以及你能做些什么做了透彻的解释

      相关问题:

      显然,我没有计算lein的启动时间。看看程序。我在看run方法中的计时。你是对的。我猜那里发生了一些奇怪的事情。你确定你在类路径上有相同的东西吗?另外:你可能有不同的内存限制,所以lein启动的程序可能需要做更多的垃圾处理正在选择。如果没有确切的设置/系统属性,则很难诊断该问题。在程序运行时,根本不会收集任何垃圾(通过
      -verbose:gc
      验证)。为了收集垃圾,必须首先创建垃圾,我不认为Clojure/lein会以某种方式使算法产生更多垃圾。我已经用-XX:+printcomilation尝试了这两种方法。在这两种情况下,都会编译run()(这里唯一有趣的函数)。但请参阅更新。不知何故,这是莱宁根造成的。提示:
      lein help trampoline
      lein run -m Foo