锁定老帖子 主题:JAVA真的比C快
精华帖 (0) :: 良好帖 (0) :: 新手帖 (4) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-06-04
最后修改:2009-06-04
魔力猫咪 写道 Sun的HotSpot虚拟机是由一家被Sun收购的Java编译器开发公司最早开发出来的。Sun收购后改名叫HotSpot,在发布前就声称可以超过C++和C。当然,在推出后是当时最快的虚拟机之一,但是并没有超过C。后来经过多次改进,速度开始接近并超过C。
主要原理是编译器可以根据运行情况,把Java代码进行动态编译优化。比如某一段代码调用特别频繁,就可以专门对这部分进行优化,产生更适合其运行的本地代码。根据现实运行情况编译的代码当然比C的静态编译代码更适合当时的情况,所以这部分代码跑得比C快不新鲜。无论任何时候,跑得最快的都是最适合当前情况的机器码。 就拿楼主的例子来看,纯粹是乘法运算,不存在优化的可能,测试结果应该很公平, 然后看看测试结果,C语言比JAVA快3倍以上 这种纯暴力计算,java怎么可能比C快 == ==|| |
|
返回顶楼 | |
发表时间:2009-06-04
HotSpot确实在某些方面做了优化(比如采用了一些牛B的算法),
但这些是典型的“空间换时间”,看看JVM内存消耗就知道了 上面的测试中GC基本上没工作,如果换一个内存低一些机子, Java的速度局限性很容易体现出来 |
|
返回顶楼 | |
发表时间:2009-06-05
guooscar 写道 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 这个是什么测试啊???有源码么??? real user sys 都是什么意思啊? 请guooscar兄仔细解释解释呗。 无论任何时候,跑得最快的都是最适合当前情况的机器码。 恩。。。魔力猫咪 这句话让我有点头绪了。。。呵呵 |
|
返回顶楼 | |
发表时间:2009-06-07
不要拿for循环测试,这个基本没有意义的,编译器都是对这些经过优化的。再者只凭一个例子就断定是不科学的。总体上讲Java是没有C快的,搞过ACM的应该深有体会。
|
|
返回顶楼 | |
发表时间:2009-10-11
单独的一个浮点运算测试能说明什么呢???
你在测试FPU???这和编程语言什么关系???? |
|
返回顶楼 | |
发表时间:2009-10-12
。。。烧饼
|
|
返回顶楼 | |