为什么这个Java代码比它下面的Objective-C代码运行得更快?

时间:2013-03-07 13:25:13

标签: java objective-c c arrays

“C很快,Java很慢”,对吧?

我在MacBook Pro Quadcore上比较了Video2Brain的Objectiv-C 3.0教程中的 a) Eclipse / Java和 b) XCode / Objectiv-C的时间表示例。结果绝对让我感到惊讶。 Java比Objective-C实现快3倍。 Java:0.718s与Objective-C相比:2.416s。

问题:我错过了什么?怎么解释这个?谢谢!

a)Java代码:

public static void main(String[] args) {

int timesTable[][] = new int[10][10];
long beginTime = System.currentTimeMillis();

// 10 000 000 x
for (int count = 0; count < 10000000; count++) {
   for (int row = 0; row < 10; row++) {
      for (int col = 0; col < 10; col++) {
         timesTable[row][col] = (row +1) * (col +1);
      }
   }
 }
 long endTime = System.currentTimeMillis();
 System.out.println("Time elapsed = " + (endTime - beginTime) + "ms");
 }

b)Objective-C代码

int main(int argc, char* argv[]) {
int timesTable[10][10];

CFAbsoluteTime beginTime = CFAbsoluteTimeGetCurrent();

 // 10 000 000 x
for (int count = 0; count < 10000000; count++) {
  for (int row = 0; row < 10; row++) {
    for (int col = 0; col < 10; col++) {
       timesTable[row][col] = (row +1) * (col +1);
    }
  }
}
 CFAbsoluteTime endTime = CFAbsoluteTimeGetCurrent();
 NSLog(@"Time elapsed = %f", endTime - beginTime);
}

更新

@nhahtdh编译器选项:编译器:Apple LLVM编译器4.2

@jlordo:当我改为timesTable [row] [column] =(row +1)*(column +1)* count

时,我得到相同的结果

@uchuugaka:是的,我同意它与Java相比基本上是C语言。我两次都进行了五次测试。系统重新启动。没有其他应用程序在运行。

@Anoop Vaidya:是的,最新版本,我得到相同的时间,没有不同的LLVM GCC 4.2或Apple LLVM编译器4.2

UPDATE2

@justin:谢谢,问题解决了。构建设置 - &gt;优化级别