为什么我的Java程序通过Eclipse运行速度比通过shell运行快4倍?

Dav*_*Far 7 eclipse shell console ubuntu runtime

当我通过Eclipse执行下面的简单代码示例(版本3.5.2,在Ubuntu 10.04上,java版本"1.6.0_20"OpenJDK运行时环境(IcedTea6 1.9.9)(6b20-1.9.9-0ubuntu1~10.04.2)OpenJDK服务器VM(内置19.0-b09,混合模式)),大约需要10秒钟.当我从我的shell执行它(使用相同的优先级和java版本)时,大约需要40秒.

for (int i = 0; i<1000*1000; i++) {
  System.out.println(Math.cos(i));
}
Run Code Online (Sandbox Code Playgroud)

我还尝试了其他程序,在运行时和输出量方面各不相同:每个程序在shell中都要慢得多.这与执行顺序无关.对于输出很少的程序,Eclipse中的最小百分比差异为85秒,而shell为145秒.

什么原因?

nos*_*nos 19

这是因为你正在为你的终端计时.在显示/滚动文本时,某些终端只是慢速.并且你的终端是行缓冲的,而eclipse控制台可能有更多的缓冲 - 导致你的程序必须在它打印的每一行之后等待你的终端.

尝试将程序的输出重定向到文件或/ dev/null,并为其计时.

在我的系统上,这与你的小循环有点不同:

$ time java T
 --snip - 1M lines of output--

real    0m24.746s
user    0m2.403s
sys     0m1.597s

$ time java T >output

real    0m5.172s
user    0m2.800s
sys     0m2.707s


Ale*_*ühl 6

由于到目前为止您的程序花在输出上的时间最多,因此执行的总时间很大程度上取决于系统调用所花费的时间.因此将它放在常规控制台上似乎比eclipse中的输出窗口慢得多,但这并不意味着,您的程序本身执行得更快.

只需将所有输出都指向一个文件,您就不会再看到太多差异了.