论坛首页 编程语言技术论坛

java比.net(C#)慢这么多么?

浏览 17188 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-07-31  

今天听到同事说.net的执行效率比java快很多,我当时就说没有,其实他们都是差不多的,都是基于虚拟机技术,只是在windwos平台上微软会对自 己的技术做一定的优化。后来自己也做了一个测试,结果太出乎我的意料了,仅仅是一个for循环的测试,结果确实是.net(3.5)的效率比 java(5.0)要高出很多,测试程序如下:
C#程序

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            long j = 1;
            System.Console.WriteLine(System.DateTime.Now.ToString());
            for (long i = 1; i < 10000000000; i++)
            {
                j = j + 1;
            }
            System.Console.WriteLine(System.DateTime.Now.ToString());
           
        }
    }
}

使用vs2008编写,.net 3.5,使用release方式生成exe文件。在命令行下执行,执行时间是21秒。

java程序,eclipse编写,java 5.0

import java.text.SimpleDateFormat;
import java.util.Date;

public class Test {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Date date = new Date();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        System.out.println(formatter.format(date));
        long j = 1L;
        for(long i = 1;i < 10000000000L;i++){
            j = j + 1;
        }
        Date date2 = new Date();
        System.out.println(formatter.format(date2));

    }

}

eclipse编写并且编译,基于java 5.0,同样在命令行下运行执行时间是1分11秒。

这样看来至少是在整数运算上java的性能就差很多啊!为什么会这样呢?
或者是我的测试程序有问题,请指教.

   发表时间:2008-07-31  
这种傻循环算不得数的,很可能被编译器优化过了。
试试排序吧。
1 请登录后投票
   发表时间:2008-07-31  
没有可比性,不能这么看,要看系统整体运行的情况
0 请登录后投票
   发表时间:2008-07-31  
>> 使用release方式生成exe文件。

这里会不会有问题? 如果java用jit呢?
0 请登录后投票
   发表时间:2008-08-02  
用 java se 6.0以上看看。。

ms 的优化技术还是很好的
0 请登录后投票
   发表时间:2008-08-06  
我前段时间用八皇后递归算法,比较了一下c、java和c#:

环境 耗时(毫秒) 编译选项
win2003 R2 vc6 21010 cl /O2
win2003 R2 vc2008 19007 cl /O2 /arch:SSE2 /fp:fast
win2003 R2 gcc(msys) 16523 (MinGW/msys)
win2003 R2 sun JDK 6 29152
win2003 R2 c# 2.0/3.5 25126
ubuntu 8.04 sun JDK 6 31320
ubuntu 8.04 GCC 4.2.3 12230 gcc -O3 -msse2 -mmmx -mfpmath=sse -funroll-loops -march=pentium4 -pipe -fomit-frame-pointer
ubuntu 8.04 ibm JDK 6 20304

结论:
1、sun jdk6在linux下比Windows2003下慢 7.44%
2、VC2008编译的C代码比VC6快 10.54%
3、Win2003下GCC(msys)编译的C代码比VC2008的快 15.03%
4、Linux下GCC编译的代码比VC2008的快 55.41%
5、linux IBM JDK6 比 SUN JDK6快 43.58%
6、linux IBM JDK6 比 VC6编译的代码快 3.48%
7、linux IBM JDK6 比 C#的代码快 23.75%
7、Windows下C#比sun Java6快 16.02%
  • 大小: 42.9 KB
0 请登录后投票
   发表时间:2008-08-07  
建议楼上再试验一下浮点运算,比如sin,cos之类的,C#还是会比java高一大截。
0 请登录后投票
   发表时间:2008-08-07  
一个简单的整数循环说明不了问题,而且除了MS自己的东西,大部分语言在Linux上的性能要比在Windows好。
推荐一个网站:
http://shootout.alioth.debian.org/gp4/index.php
做各种语言实现多个常见运算(binary-trees, recursive...)的性能对比:Java/Ruby/Python/C/C++ ...
可以看一下Java和C++的对比,大部分在1.0~2.0之间
http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang;=java&lang2=gpp

0 请登录后投票
   发表时间:2008-09-24  
mathgl 写道
用 java se 6.0以上看看。。

ms 的优化技术还是很好的

-------------------
ms的优化根本不值一提。
想当年borland的 c++ complier把ms的c打得满地找牙
现在也卖掉啦。
0 请登录后投票
   发表时间:2008-09-25  
Durian 写道
mathgl 写道
用 java se 6.0以上看看。。

ms 的优化技术还是很好的

-------------------
ms的优化根本不值一提。
想当年borland的 c++ complier把ms的c打得满地找牙
现在也卖掉啦。

那是complier大牛 Anders同学加盟microsoft前的事吧,都10多年了。
1
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics