简单循环的速度

Bjö*_*röm 3 java performance

我在Java中做了一个简单的循环来测试速度.与C中的相同循环相比,需要更多时间.2十亿次迭代大约需要6.5秒其执行时

如果它被认为是缓慢的 - 可以做些什么来改善性能?

有人会责怪JVM的启动吗?或者 - JIT编译器没有完成它的工作?

  • 平台:windows xp
  • 处理器速度:3.4 GHz

    public class Jrand {
    
    public static void main (String[] args) {
    
      float f;
    
      long startTime = System.currentTimeMillis();
    
      for (int i = 0; i < 2000000000; i++) {
        f = i * 0.0001F;
      }
      long endTime = System.currentTimeMillis();
      float totalTime = (endTime - startTime);
      System.out.println("time: " + totalTime/1000);
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)

Mac*_*gan 6

启动时间

Java启动时间通常比许多语言慢得多,包括C,C++,Perl或Python,因为在使用之前必须加载许多类(以及平台类库中的所有类).

所以这可能是一个原因

但我认为Java在各个方面往往比母语慢.看看这些统计数据: 在此输入图像描述

图表: 在此输入图像描述

你能加快速度吗?不 - 而且可能你可以责怪JVM;)


Pet*_*rey 6

这个

for (int j = 0; j < 10; j++) {
    float f;

    long start = System.nanoTime();

    for (int i = 0; i < 2000000000; i++) {
        f = i * 0.0001F;
    }
    long end = System.nanoTime();
    long timeToCallNanoTime = System.nanoTime() - end;
    long time = Math.max(0, end - start - timeToCallNanoTime);
    System.out.println("time: " + time + " ns.");
}
Run Code Online (Sandbox Code Playgroud)

版画

time: 2580790 ns.
time: 4241443 ns.
time: 17 ns.
time: 0 ns.
time: 0 ns.
time: 0 ns.
time: 0 ns.
time: 0 ns.
time: 5 ns.
time: 0 ns.
Run Code Online (Sandbox Code Playgroud)

正如您所看到的那样,JIT完全优化了环路.它不可能比这更快.