Java与C简单性能测试

use*_*065 -2 c java printing comparison performance

即运行一个简单的循环,在java和c中打印出迭代器(i)1.000.000次.

我分别使用netbeans和visual studio.

我不关心精度,但大约40秒:

netbeans(java)打印了大约500.000个数字,而windows(c)打印了大约75.000个数字

- 为什么这么大的差异?

我使用通用的intel core2duo(2.0 Ghz)pc与windows7

Ree*_*ore 6

这似乎是错的.你能提供你的代码吗?

我的版本:

C版编译gcc -std=c99 -o itr itr.cgcc 4.5.1

#include <stdio.h>

int main( int argc, char **argv )
{
    for ( int i = 0; i < 1000000; i++ )
    {
        printf("%d\n", i);
    }
}
Run Code Online (Sandbox Code Playgroud)

Java版本编译成javac Itr.javajavac 1.6.0_20和JVM的存在:

OpenJDK Runtime Environment (IcedTea6 1.9.1) (ArchLinux-6.b20_1.9.1-1-x86_64)
OpenJDK 64-Bit Server VM (build 17.0-b16, mixed mode)
Run Code Online (Sandbox Code Playgroud)

代码 -

class Itr
{
    public static void main( String[] av )
    {
        for ( int i = 0; i < 1000000; i++ )
        {
            System.out.println(i);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

和时代:

time ./itr
// Snip Output //

real    0m1.964s
user    0m0.330s
sys     0m1.477s


time java Itr
// Snip Output //

real    0m5.245s
user    0m2.337s
sys     0m3.023s
Run Code Online (Sandbox Code Playgroud)

测试系统是运行64位ArchLinux的Intel Core i5 M520(@ 2.4GHz).

  • 我怀疑你在测量JVM的启动时间而不是实际的循环.... (3认同)
  • @Reese Moore:哎哟,那里有一些**UB**,在C中有未初始化的循环变量.有了一百万个新行,你甚至无法看到它的起源. (2认同)