`
rainbow686
  • 浏览: 161688 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

    博客分类:
  • Java
阅读更多

今天听到同事说.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的性能就差很多啊!为什么会这样呢?
或者是我的测试程序有问题,请指教.

分享到:
评论
21 楼 dwangel 2009-07-28  
话说,这个不是测循环的效率,是测格式化时间类的效率。
貌似SimpleDateFormat效率没c#的好。
不要用SimpleDateFormat,直接用Date的toString()

另外,java的string……
20 楼 diddyrock 2009-07-15  
java透明而且便宜啊,性能差点可以忍受,真的技术型的公司的主打产品里面应该不会用太多.net吧
19 楼 ray_linn 2009-07-10  
木哥哥 写道

这个测试没有意义.比些不规则的测试吧.

java的我不知道,像这个循环.net的就是假的,编译器它不会真去给你循环,他一看你是个规律的计算,ok,直接给结果了.哈



。。。胡扯。
18 楼 JeffreyZhao 2009-07-10  
木哥哥 写道

java的我不知道,像这个循环.net的就是假的,编译器它不会真去给你循环,他一看你是个规律的计算,ok,直接给结果了.哈

如果是假的,那么如何解释花费11秒,而不是瞬间出解?
如果你看了汇编,就知道不会这样优化的。
17 楼 qhfrose 2009-01-15  
我在Ubuntu 8.04.2下面按了个VirtualBox,装了个WinXP SP3,.Net Framework 3.5 Sp1 ,sun jdk6u11.运行结果是C#Release是18秒多,java是30秒多。
直接在Ubuntu 运行C#(还是在windows下编译的,用mono 1.2.6运行)花了44秒多。java的情况是,用sun jdk1.5u12,花了39秒多,用sun jdk1.6u7花了22秒。
16 楼 gangezhizhi 2009-01-13  
这种测试并不科学,变化太多。在说,程序也不能唯性能为首,一点点快慢不影响
15 楼 木哥哥 2009-01-12  

这个测试没有意义.比些不规则的测试吧.

java的我不知道,像这个循环.net的就是假的,编译器它不会真去给你循环,他一看你是个规律的计算,ok,直接给结果了.哈
14 楼 wzpwork 2008-12-31  
这个可比性不强,不同的JVM有很大差距. 楼主可以试一下SUN,IBM,BEA(现在被ORACLE买下了)的JVM下的JAVA跟C#的差异.
13 楼 BigBlue 2008-11-11  
我的测试结果:相差不大
Sun Java 1.5.0-12
=====================
-server

29297
29078
29500

-client

51828
51812
51672


.NET 3.5 sp1
=====================
release版
00:00:18.7968750
00:00:18.8750000

Debug版
00:00:49.0156250
00:00:50.5468750
12 楼 sdh5724 2008-11-08  
今天, 我用IBM JDK 测试了下, 时间不到1秒!!!
用JROCKIT测试, 时间是30秒

以上都是JAVA6兼容的JDK
11 楼 sdh5724 2008-11-01  
补充下, 对于这个测试, JVM的内存大小, JDK的版本, 还是JVM的运行模式都没有任何的影响。
10 楼 sdh5724 2008-11-01  
首先, 我想让大家知道一个事情, 就是JDK的任何版本都没有经过INTEL的特殊优化, 所以, 这个比较没有什么意义。 JAVA7开始, SUN已经和INTEL合作优化了。

另外, 我在我的笔记本上机器上跑了下,

2008-11-01 11:28:21
2008-11-01 11:28:30
===========
2008-11-01 11:33:08
2008-11-01 11:33:18

不过, 我没有MS的软件,JAVA5/JAVA6 都才才9秒-10秒的执行时间, 对于类似的循环, 大部分的语言都应该差异没有那么大吧?

OS: Linux HELLO 2.6.27-7-generic #1 SMP Thu Oct 30 04:12:22 UTC 2008 x86_64 GNU/Linux
cpu:
processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 15
model name : Intel(R) Core(TM)2 CPU         T7400  @ 2.16GHz
stepping : 6
cpu MHz : 1000.000
cache size : 4096 KB
physical id : 0
siblings : 2
core id : 1
cpu cores : 2
apicid : 1
initial apicid : 1
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl pni monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr lahf_lm
bogomips : 4322.44
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:

9 楼 kimmking 2008-09-25  
Durian 写道
mathgl 写道
用 java se 6.0以上看看。。

ms 的优化技术还是很好的

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

那是complier大牛 Anders同学加盟microsoft前的事吧,都10多年了。
1
8 楼 Durian 2008-09-24  
mathgl 写道
用 java se 6.0以上看看。。

ms 的优化技术还是很好的

-------------------
ms的优化根本不值一提。
想当年borland的 c++ complier把ms的c打得满地找牙
现在也卖掉啦。
7 楼 QuakeWang 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

6 楼 ray_linn 2008-08-07  
建议楼上再试验一下浮点运算,比如sin,cos之类的,C#还是会比java高一大截。
5 楼 vdgame 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%
4 楼 mathgl 2008-08-02  
用 java se 6.0以上看看。。

ms 的优化技术还是很好的
3 楼 dengyin2000 2008-07-31  
>> 使用release方式生成exe文件。

这里会不会有问题? 如果java用jit呢?
2 楼 wangxinyaqin 2008-07-31  
没有可比性,不能这么看,要看系统整体运行的情况

相关推荐

Global site tag (gtag.js) - Google Analytics