`
rainbow686
  • 浏览: 163677 次
  • 性别: 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  
没有可比性,不能这么看,要看系统整体运行的情况

相关推荐

    Java与.NET?到底选择哪个?

    Java和.NET是两个备受瞩目的平台,各自拥有强大的生态系统、丰富的库和工具,以及广泛的应用领域。本文将深入探讨这两个平台的本质特点,帮助您根据自身需求做出明智的选择。 Java,由Sun Microsystems开发并由...

    一周学会C# java程序员转.NET必看

    【一周学会C#——java程序员转.NET必看】 C#是一种由微软开发的面向对象的编程语言,设计用于.NET Framework上。对于从Java转到.NET平台的程序员来说,理解C#的基本概念和语法是非常重要的。以下是一些关键知识点:...

    VB.NET C# 互转 Convert

    而C#(C Sharp)则是微软为.NET平台设计的一种现代化的、类型安全的面向对象的编程语言,它吸收了C++和Java的优点,语法更为严谨,更适合大型项目和高性能开发。 VB.NET和C#之间的转换主要依赖于编译器的语法差异。...

    whisper.net C# demo源码

    C# vs2019 .net framework编程whispernet demo源码,详情参考博客 blog.csdn.net/FL1623863129/article/details/135236329

    java程序调用.net/c#的webservice

    Java程序调用.NET/C#的Web服务是一种跨平台的交互方式,主要依赖于SOAP(Simple Object Access Protocol)协议,使得不同编程语言开发的应用程序能够相互通信。在本场景中,用户已经提供了一个.NET的Web服务,而我们...

    java , .net, php, c#代码统计工具

    java , .net, php, c#代码统计工具 java , .net, php, c#代码统计工具 java , .net, php, c#代码统计工具 java , .net, php, c#代码统计工具

    VB.Net to C# Converter将VB代码转换成C#代码

    《VB.Net to C# Converter:实现编程语言间的无缝迁移》 在编程世界中,不同的编程语言各有其特色和优势,而开发人员有时需要在不同语言间进行切换。VB.Net(Visual Basic .NET)和C#是.NET框架下的两种主要编程...

    C#.net屏保设计

    C#.net屏保设计C#.net屏保设计C#.net屏保设计C#.net屏保设计C#.net屏保设计C#.net屏保设计C#.net屏保设计C#.net屏保设计C#.net屏保设计C#.net屏保设计C#.net屏保设计C#.net屏保设计C#.net屏保设计C#.net屏保设计C#...

    .net c# To Java.zip

    压缩包内的文件包括"C#.net to Java Converter.exe"和"readme.txt"。前者很可能是转换工具的可执行文件,用户只需双击运行就可以启动转换过程。后者通常是提供关于如何使用软件、注意事项和版本信息等细节的文本文件...

    C# .net 使用Java公钥实现RSA加密

    C# .net 使用Java公钥实现RSA加密

    java .net c# delphi \面试题

    Java、.NET、C#和Delphi是四种广泛使用的编程语言,它们在软件开发领域各自拥有独特的特性和应用。在面试中,对于这些语言的掌握程度通常会通过一系列的问题来评估,以确保候选人具备必要的技能和知识。以下是对这四...

    Discuz! .net C# 开源论坛 最终版完全代码

    Discuz! 论坛 C# 完全开源版本。非常强大的C# 经典论坛代码,虽然死在4.0版本以前。但是里面包含各类功能非常完善,包含xml,rss,ftp,config,sql,存储过程等等。c# 学习开必备。

    asp.net c#面试题

    全部都是面试的宝典; c# asp.net .net .net面试题 c#面试题 c# asp.net .net .net面试题 c#面试题

    VB.Net C#代码转换工具 .doc

    SharpDevelop是一个基于C#开发的编辑器,支持多种程序语言,包括C#、Java、VB.Net等。它可以支持多种语言界面,提供丰富的代码模版和外接插件等功能。SharpDevelop是一个轻型的开发工具,支持基于项目或者是文件的...

    Asp.NET C#简单三层架构新闻发布系统源代码

    一个用于学习Asp.NET C#编程的简单三层架构新闻发布系统,此源码是我学习三层架构时做的一个新闻发布系统,供学习三层的朋友们参考。 源码中涉及用到的技术: C#,Sql Server2005存储过程,触发器,Div+Css,jQuery, ...

    .net C# Cron表达式解析.

    在.NET开发环境中,C#是一种常用的编程语言,而Cron表达式则是一种强大的定时任务调度工具,常用于Linux系统中的计划任务。然而,在C#中,我们也可以通过库来解析和使用Cron表达式,这使得.NET开发者也能利用Cron的...

    日后从事java还是.net好(高手的一点启发)

    ### 从事Java还是.NET:深度解析与建议 #### 标题和描述中的核心知识点解析: 在探讨“日后从事Java还是.NET好”的问题时,我们首先需要理解这两个技术栈的基本概念、应用场景以及各自的优缺点。 **Java**:一种...

    Tangible Software Solutions 源代码转换可在 VB.NET、C#、Java、C++和Python之间

    Tangible Software Solutions 是功能齐全的源代码转换软件,可在 VB.NET、C#、Java、C++和Python之间,使用简单,功能丰富,灵活的进行选择和操作,界面友好。 C# to C++ 转换 C# to Java 转换 C# to VB 转换 C++ ...

    C++ Java C#.net VB.net 语法对比

    ### C++、Java、C# .NET 和 VB.NET 语法对比 #### 1. 基本数据类型 为了帮助开发者快速掌握不同编程语言的基本数据类型,以下表格提供了C++、VB.NET、C# .NET 和 Java 的基本数据类型的对应关系。 | 基础类型名 |...

    AES加密解密,iOS,Android,Java,.Net通用

    本工程可以直接使用,而且与IOS,Android,JAVA,.NET 已调通。 主要用于客户端进行通信,数据之间地安全性。对数据进行加密和解密 AES加密有多种算法模式,下面提供两套模式的可用源码: 一、CBC(Cipher Block ...

Global site tag (gtag.js) - Google Analytics