锁定老帖子 主题:JAVA真的比C快
精华帖 (0) :: 良好帖 (0) :: 新手帖 (4) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-06-02
起初只是为了弄清楚JAVA速度到底咋样的,做了两个测试,结果都表明,JAVA比C快 25%
我的测试环境,CPU:TK-55(1.8G)操作系统:WINXPC编译器:GCC 3.4.2JAVA编译器:JKD1.6update13
测试1:算10000000000次循环累乘 JAVA版代码: import java.io.IOException; public class test { public test() { double k = 0; for (int j = 0; j < 100; j++) { for (int i = 0; i < 100000000; i++) { k += 3.1415926 * i * j; } } System.out.println(k); } public static void main(String[] args) throws IOException { new test(); } } C版代码: #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { double k = 0; for(int j=0;j<100;j++) for (int i = 0; i < 100000000; i++) { k += 3.1415926 * i*j; } printf("%f\n",k); system("pause"); } 结果 JAVA用时52秒 C用时70秒。
测试2: 用递归算法算斐波那契第45项 JAVA代码: public class test { public static int Fibonacci(int n) { if (n < 2) return 1; else { return Fibonacci(n - 1) + Fibonacci(n - 2); } } public static void main(String[] argc) { System.out.println(Fibonacci(45)); } }
C代码: #include <stdio.h> #include <stdlib.h> int Fibonacci(int n){ if(n<2) return 1; else { return Fibonacci(n-1)+Fibonacci(n-2); } } int main(void) { printf("%d",Fibonacci(45)); system("pause"); return 0; }
这次结果,JAVA 用时22秒 C用时29秒。
两次结果比较下来。JAVA都只占用了C的75%时间,也就是说JAVA比C快25%我也用VC++6.0测试过。比GCC慢好多。我也不清楚为什么,不过我真的好佩服SUN的那些计算机专家,做出来的东西真牛!
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-06-02
我是用表掐的时间。基本上1秒误差吧。
|
|
返回顶楼 | |
发表时间:2009-06-02
Sun的虚拟机会对反复执行的代码做专门优化,所以使得这部分代码的速度会越来越快。
不过如果是第一次执行,或者执行的代码反复执行的次数比较少的话,是赶不上C的速度的。 |
|
返回顶楼 | |
发表时间:2009-06-03
你这种比较肯定是有问题的。单单一个垃圾回收机制就对java的性能有很大影响
当然现在的java版本gc已经不是一个大问题了。 |
|
返回顶楼 | |
发表时间:2009-06-03
魔力猫咪 写道 Sun的虚拟机会对反复执行的代码做专门优化,所以使得这部分代码的速度会越来越快。
不过如果是第一次执行,或者执行的代码反复执行的次数比较少的话,是赶不上C的速度的。 也许是吧,但GCC也优化了啊。 我用gcc -O3优化,结果几乎一样。 尤其是for 100000000000次循环的那个 每次循环都是累加的,还有乘法,根本就没什么捷径可以走。 是不是JAVA在对浮点型运算跟C处理的不一样啊。 JAVA到底是怎么做到的呢? 也许在大型运算里,JVM垃圾回收会是拖后腿的。 但是这个测试结果,在我看来JAVA几乎完成了不可能完成的任务。 |
|
返回顶楼 | |
发表时间:2009-06-04
我的测试如下:
T5470(1.6G) winxp gcc3.4.5 jdk1.50_11 算累乘: C的时间59.5s java的时间60.5s |
|
返回顶楼 | |
发表时间:2009-06-04
sun的HotSpot JVM是用C++写的,感觉不大可能超过C或C++
|
|
返回顶楼 | |
发表时间:2009-06-04
jdk1.6
mingw32-gcc.exe (GCC) 3.4.5 (mingw-vista special r3) javac Test.java gcc -o test -O3 test.c time ./test real 0m8.797s user 0m0.015s sys 0m0.015s time java -cp . Test real 0m30.594s user 0m0.031s sys 0m0.000s |
|
返回顶楼 | |
发表时间:2009-06-04
不要拿这个来测试,写个server 或者引擎什么的来试试
|
|
返回顶楼 | |
发表时间:2009-06-04
Sun的HotSpot虚拟机是由一家被Sun收购的Java编译器开发公司最早开发出来的。Sun收购后改名叫HotSpot,在发布前就声称可以超过C++和C。当然,在推出后是当时最快的虚拟机之一,但是并没有超过C。后来经过多次改进,速度开始接近并超过C。
主要原理是编译器可以根据运行情况,把Java代码进行动态编译优化。比如某一段代码调用特别频繁,就可以专门对这部分进行优化,产生更适合其运行的本地代码。根据现实运行情况编译的代码当然比C的静态编译代码更适合当时的情况,所以这部分代码跑得比C快不新鲜。无论任何时候,跑得最快的都是最适合当前情况的机器码。 |
|
返回顶楼 | |